в kotlin, как проверить, является ли объект экземпляром базового класса или производного класса - PullRequest
0 голосов
/ 16 марта 2019

Наличие базового класса и производного класса (здесь упрощенно)

open class BaseClass {
    var baseData: BaseData? = null
}
open class DerivedClass : BaseClass {
    var drivedData: DerivedData? = null
}

И массив для BaseClass

val list = ArrayList<BaseClass>()
// populated the list with mixed objects of BaseClass and DerivedClass

for (obj in list) {
    when (obj){
        is DerivedClass -> {}
        is BaseClass -> {}
    }
}

Это может работать, потому что сначала проверяется, является ли он DerivedClass, а затем проверяется на BaseClass.

Если есть лучший способ без использования порядка проверки?

1 Ответ

1 голос
/ 18 марта 2019

Как насчет этого

val list = ArrayList<BaseClass>()

for (obj in list) {
    when(obj.javaClass.name) {
        BaseClass.clazz() -> { println("is base !") }
        DerivedClass.clazz() ->  { println("is derived !") }
    }
}

С:

open class BaseClass {
    companion object {
        fun clazz() = "BaseClass"
    }
}

open class DerivedClass : BaseClass() {
    companion object {
        fun clazz() = "DerivedClass"
    }
}

Я знаю, что это не так уж и здорово, нам приходится иметь дело с дополнительным методом clazz(), и мы этого не сделалииспользуйте оператор is, но, по крайней мере, он отвечает на вопрос: есть ли способ без использования порядка проверки:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...