考虑继承它的一般class Item
和特定class Event
:
open class Item<T> {
fun copyFrom(item: T) {
if (this is Event && item is Event) {
owner = item.owner
value = item.value
}
}
}
class Event : Item<Event> {
open var owner = ""
open var value = 0
}
感谢类型推断,我们不必将Item转换为Event,我们可以直接访问owner
和value
。但是,它表示item
的类型为T
,并且无法在Event
子句中强制转换为item is Event
。我相信这不应该发生,因为这个子句在Java中是正确的吗?
编辑:
我知道copyFrom
实现应该在Event
中完成,但这只是为了演示类型推断问题。
答案 0 :(得分:4)
即使您解决了语法问题:不也可以这样做。
您正在创建一个通用容器,它明确检查是否有一个不同的子类。然后在子类中执行向下转换和访问字段。
这与优秀的OO设计完全相反。你的基类应该知道关于任何子类的没有!