我想根据对象的其中一个字段来投射对象,该字段将具有该对象的正确值。
例如
object as object.class
object.class等同于一个类,例如Int或任何其他kotlin类。
有可能吗?
答案 0 :(得分:0)
是的,如果您的Required类扩展了基类
(list.get(pos) as Class).requeiedfunction
答案 1 :(得分:0)
使用预期的接口和BaseClass,可以根据需要使用类型安全性来实现此目的。这是使用对象作为输入,但是按照这种模式,任何类型的实例都可以工作。
该界面强制分配类型,并且可以让您在没有任何魔术的情况下将Type保持在范围内。它使您可以轻松处理所有预期的情况。
interface ClassCast<out T> {
val type: T
}
open class MyClassBase
class MyClassOne : MyClassBase()
class MyClassTwo : MyClassBase()
class LonerClass
val myObjOne = object : ClassCast<MyClassBase> {
override val type = MyClassOne()
}
val myObjTwo = object : ClassCast<MyClassBase> {
override val type = MyClassTwo()
}
val nonRelatedObj = object : ClassCast<LonerClass> {
override val type = LonerClass()
}
fun castToClass(item: ClassCast<Any>): Any {
return when (item.type) {
is MyClassOne -> {
println("We have an Instance of class one")
MyClassOne()
}
is MyClassTwo -> {
println("We have an Instance of class two")
MyClassTwo()
}
is LonerClass -> {
println("Class that doesnt inherit from base type")
LonerClass()
}
else -> {
println("Unexpected type: $item")
throw Exception("Unexpected type cant be cast")
}
}
}
castToClass(myObjOne) // Prints: "We have an Instance of class one"
castToClass(myObjTwo)) // Prints: "We have an Instance of class two"
castToClass(nonRelatedObj) // Prints: "Class that doesnt inherit from base type"