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

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

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

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

这样调用:

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

不知道你的用例,但…