12

好的,既然 Kotlin 正式出局,我又开始使用它,我很困惑,我需要在两者的优点之间做出选择sealeddata但不知何故不能两者兼得。

例如,这对我来说似乎很有意义,但无法编译:

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

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

有什么我想念的吗?

4

1 回答 1

16

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

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

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

于 2016-03-10T16:14:33.907 回答