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