具有基类和派生类(在此简化)
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进行了检查。
是否有更好的方法而不利用检查的顺序?
答案 0 :(得分:1)
那
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
运算符,但至少它回答了以下问题: is有一种方法不使用检查的顺序:)