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

我想检查SignalPayload的子类实现接口IConvertible 。 我怎样才能做到这一点?

 sealed class SignalPayload { companion object { fun trueTypeInstance(type: KClass) : SignalPayload? { // if (*** __ KClass 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) } 

我怎样才能做到这一点?

UPD
我曾经想过使用它。
SignalChannel类知道需要的字段mPayload (通过属性val type: ??? )。 首先mPayload等于空

 interface IArriving { fun onNewPayload(data: SignalPayload, sender: IArriving?) } interface IConvertible { val asBool: Boolean val asInt: Int val asFloat: Float val asString: String fun setFromPayload(data: IConvertible) } class SignalChannel(val idx: Int, val type: ???, val name: String = "") : IArriving { var mPayload: SignalPayload = Empty // when new data arriving - need converting for `type` and refresh field mPayload override fun onNewPayload(data: SignalPayload, sender: IArriving?) { if ( mPayload is Empty ) { mPayload = SignalPayload.trueTypeInstance(type) // that's my problem } mPayload.setFromPayload(data) } } 

One Solution collect form web for “检查类是否实现了接口。 科特林”

您可以使用适当的generics,以将方法限制为既是SignalPayload 又是 IConveribletypes:

 fun  trueTypeInstance(): SignalPayload? where T : IConvertible, T : SignalPayload { TODO() } 

这样调用:

 SignalPayload.trueTypeInstance() //OK SignalPayload.trueTypeInstance() //Fails SignalPayload.trueTypeInstance() //Fails 

不知道你的用例,但…

  • 如何在Kotlin中重命名属性的后台字段
  • Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()
  • 如何在Kotlin中添加数组索引值?
  • (未知来源:7)kotlin android中的错误
  • java.lang.NoClassDefFoundError:kotlin / jvm / internal / Intrinsics
  • 私人“财产”是“场”吗?
  • Kotlin:以函数的forms传递对象作为参考,并改变它的实例
  • 如何用Kotlin做JEE CDIdependency injection
  • Android w / Kotlin纯java-Junit的NoClassDefFoundError解决方法不起作用
  • Kotlin当多个值不工作时值是一个Android视图
  • groupValues只返回重复模式的最后一次出现
  • Kotlin language will be the best programming language for Android.