Kotlingenerics和错误的types推断
考虑一个普通的class Item
和inheritance它的特定class Event
:
open class Item { fun copyFrom(item: T) { if (this is Event && item is Event) { owner = item.owner value = item.value } } } class Event : Item { open var owner = "" open var value = 0 }
感谢types推理,我们不必将物品投射到事件,我们可以直接访问owner
和value
。 但是它表示该item
是T
types,不能转换为item is Event
子句。 我相信这不应该发生,因为这个条款在Java中是正确的?
编辑:
我意识到copyFrom
实现应该在Event
完成,但这只是为了演示types推断问题。
即使你理清句法问题, 也不要这样做。
你正在创建一个通用的容器,它明确地检查一个不同的子类是否进来。然后在子类中进行downcast和访问字段。
这就像一个好的面向对象设计的绝对相反。 你基类应该对任何子类都一无所知 !