sealed
和data
的优势之间做出选择,但不知何故可以&#39两者都有。
例如,这似乎对我有意义,但不编译:
sealed class Expr {
data class Const(val number: Double) : Expr()
data class Sum(val expr1 : Expr, val expr2 : Expr) : Expr()
}
因为数据类不能扩展其他类。
我有什么遗失的吗?
答案 0 :(得分:15)
在进入Beta状态之前不久,Kotlin团队决定在data
类使用(see this post)上添加某些限制,因为它们在类层次结构中引起了问题。
其中一个限制是data
类不应该对另一个类进行子类型,只允许接口。因此,data
类无法从sealed class
派生。
这是避免进一步推迟1.0版本的必要措施。一旦有问题的案例得到彻底审查并找到了良好的设计解决方案,据说在未来的版本中会解除一些限制。