Kotlin:密封类不能“包含”数据类? 为什么?

好了,现在Kotlin已经正式出来了,我又开始玩了,我很困惑,我需要在sealeddata的优点之间进行选择,但是不知道怎么样。

例如,这对我来说似乎是有道理的,但是并没有编译:

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

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

有什么我失踪?

在进入Beta状态之前不久,Kotlin团队决定在data类使用方面增加某些限制( 参见这篇文章 ),因为它们在类层次结构中造成了问题。

其中一个限制是data类不应该子类型另一个类,只有接口是允许的。 因此, data类不能从sealed class派生。

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