Kotlin泛型和错误的类型推断

时间:2017-06-06 08:20:26

标签: generics kotlin

考虑继承它的一般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,我们可以直接访问ownervalue。但是,它表示item的类型为T,并且无法在Event子句中强制转换为item is Event。我相信这不应该发生,因为这个子句在Java中是正确的吗?

编辑:

我知道copyFrom实现应该在Event中完成,但这只是为了演示类型推断问题。

1 个答案:

答案 0 :(得分:4)

即使您解决了语法问题:也可以这样做。

您正在创建一个通用容器,它明确检查是否有一个不同的子类。然后在子类中执行向下转换和访问字段。

这与优秀的OO设计完全相反。你的基类应该知道关于任何子类的没有