Kotlin:密封的课程不能包含"数据类?为什么?

时间:2016-03-10 15:52:27

标签: kotlin data-class

好的,既然Kotlin已经正式退出,我又开始玩它了,我很困惑,我需要在sealeddata的优势之间做出选择,但不知何故可以&#39两者都有。

例如,这似乎对我有意义,但不编译:

sealed class Expr {
    data class Const(val number: Double) : Expr()
    data class Sum(val expr1 : Expr, val expr2 : Expr) : Expr()
}

因为数据类不能扩展其他类。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:15)

在进入Beta状态之前不久,Kotlin团队决定在data类使用(see this post)上添加某些限制,因为它们在类层次结构中引起了问题。

其中一个限制是data类不应该对另一个类进行子类型,只允许接口。因此,data类无法从sealed class派生。

这是避免进一步推迟1.0版本的必要措施。一旦有问题的案例得到彻底审查并找到了良好的设计解决方案,据说在未来的版本中会解除一些限制。