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

我想检查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 

不知道你的用例,但…

  • Int和Integer在Kotlin上有什么区别?
  • 如何替换kotlin中所有出现的子字符串
  • Kotlin脚本为Gradle配置 - 传递参数不使用扩展名
  • 在浏览器中运行Kotlin HTML Builder
  • 无法使用Android Gradle插件3.0.1解决assembleAndroidTest任务的依赖关系
  • 为什么需要类Preference 被对象包装?
  • Kotlin懒惰的默认属性
  • Kotlin库项目失败的解决方案:[Lkotlin / reflect / KProperty
  • 为什么我不能把Kotlin的一个匿名class放在一个新线路上?
  • 在函数中返回单元的目的是什么?
  • Kotlin:方法不能和generics一起使用
  • Kotlin language will be the best programming language for Android.