Убедитесь, что класс реализует интерфейс. Котлин

Я хочу проверить, что дочерний класс 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) } 

Как я могу это сделать?

UPD
То, что я подумал, использует его.
Класс SignalChannel знает, какое поле требуется для mPayload (через свойство val type: ??? ). Сначала mPayload равен Empty

 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) } } 

Вы можете использовать правильные дженерики, чтобы ограничить метод типами, которые являются как SignalPayload и IConverible :

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

Вызывается следующим образом:

 SignalPayload.trueTypeInstance<payloadString>() //OK SignalPayload.trueTypeInstance<Empty>() //Fails SignalPayload.trueTypeInstance<String>() //Fails 

Не уверен в вашем случае использования, хотя …

Intereting Posts
Как создать класс данных реализует специальные UserDetails Spring Secuirty Sugar ORM, Список всех в Котлин? Java работает, но Kotlin не Почему в заявлении на печать Kotlin не требуется уточнение сферы применения? «Объект» не является частью схемы для этого Царства Нельзя ли градировать проект построения, когда я добавляю класс ChatInformation kotlin, который расширяет RealmObject до моего проекта, где ошибка? Доступ к TextView в пользовательском классе в Котлине Разрешены только безопасные или неаудированные звонки, разрешенные для нулевого типа приемника arraylist Сопоставление вложенных коллекций с аннотациями JPA спящего режима? Карта <Key, Set <Значение >> Замечание типа Observable.combineLatest в kotlin Свойство расширения с расширением Kotlin Что делает ключевое слово reified в Kotlin? как использовать kapt в области androidTest Как представлять несколько типов (типы объединения) при настройке JavaScript практика импорта и сглаживания Bluetooth-клиент Socket получает одинаковое исключение каждый раз