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推理,我们不必将物品投射到事件,我们可以直接访问ownervalue 。 但是它表示该itemTtypes,不能转换为item is Event子句。 我相信这不应该发生,因为这个条款在Java中是正确的?

编辑:

我意识到copyFrom实现应该在Event完成,但这只是为了演示types推断问题。

即使你理清句法问题, 也不要这样做。

你正在创建一个通用的容器,它明确地检查一个不同的子类是否进来。然后在子类中进行downcast和访问字段。

这就像一个好的面向对象设计的绝对相反。 你基类应该对任何子类都一无所知