Reflection 检查类是否实现了接口。科特林

Reflection 检查类是否实现了接口。科特林,reflection,kotlin,Reflection,Kotlin,我想检查SignalPayload的子类是否实现了接口IConvertible。我该怎么做 sealed class SignalPayload { companion object { fun trueTypeInstance(type: KClass<SignalPayload>) : SignalPayload? { // if (*** __ KClass<SignalPayload> implemented ICon

我想检查
SignalPayload
的子类是否实现了接口
IConvertible
。我该怎么做

sealed class SignalPayload {
    companion object {
        fun trueTypeInstance(type: KClass<SignalPayload>) : SignalPayload? {
          //  if (*** __ KClass<SignalPayload> implemented IConvertible ___  **) 
                ......

        }
    }
}
object Empty : SignalPayload()
data class BadData(val message: String = "BAD") : SignalPayload() {
    override fun toString(): String {
        return message
    }
}
data class payloadString(private var payload: String = "") : SignalPayload(), IConvertible
data class payloadInt(private var payload: Int = 0) : SignalPayload(), IConvertible
data class payloadFloat(private var payload: Float = 0F) : SignalPayload(), IConvertible
data class payloadBool(private var payload: Boolean = false) : SignalPayload(), IConvertible 

interface IConvertible {
    val asBool: Boolean
    val asInt: Int
    val asFloat: Float
    val asString: String
    fun setFromPayload(data: IConvertible)
}

您可以使用适当的泛型,以便将该方法限制为同时为
SignalPayload
IConverible
的类型:

fun <T> trueTypeInstance(): SignalPayload? 
   where T : IConvertible, T : SignalPayload {
     TODO()
} 
fun trueTypeInstance():信号负载?
其中T:IConvertible,T:SignalPayload{
待办事项()
} 
这样称呼:

SignalPayload.trueTypeInstance<payloadString>() //OK
SignalPayload.trueTypeInstance<Empty>() //Fails
SignalPayload.trueTypeInstance<String>() //Fails
SignalPayload.trueTypeInstance()//确定
SignalPayload.trueTypeInstance()//失败
SignalPayload.trueTypeInstance()//失败

但是不确定您的用例…

您是否尝试过
is
?从文档中:
if(yourObj是SignalPayload{print(yourObj.length)}
()“是”来自类的实例?是吗?我需要输入类的“fun trueTypeInstance”名称。这个函数必须返回所需类的实例。您的用例是什么?fun trueTypeInstance(payloadInt::class)-->returned payloadInt()
SignalPayload.trueTypeInstance<payloadString>() //OK
SignalPayload.trueTypeInstance<Empty>() //Fails
SignalPayload.trueTypeInstance<String>() //Fails