Kotlin:密封 class 不能 "contain" 数据 classes?为什么?
Kotlin: sealed class cannot "contain" data classes? Why?
OK,现在 Kotlin 正式出来了,我又开始玩它了,我很困惑,我需要在 sealed
和 data
的优点之间做出选择,但不知何故可以两者都有。
例如,这对我来说似乎有意义,但无法编译:
sealed class Expr {
data class Const(val number: Double) : Expr()
data class Sum(val expr1 : Expr, val expr2 : Expr) : Expr()
}
因为数据类不能扩展其他类。
有什么我遗漏的吗?
在进入 Beta 状态前不久,Kotlin 团队决定对 data
classes 的使用 (see this post) 添加某些限制,因为它们在 [=21] 中造成的问题=]层次结构。
其中一个限制是 data
class 不应该子类型另一个 class,只允许接口。因此,data
classes 不能派生自 sealed class
.
这是避免进一步推迟 1.0 发布的必要措施。据说一旦有问题的案例被彻底审查并找到一个好的设计解决方案,一些限制将在未来的版本中取消。
OK,现在 Kotlin 正式出来了,我又开始玩它了,我很困惑,我需要在 sealed
和 data
的优点之间做出选择,但不知何故可以两者都有。
例如,这对我来说似乎有意义,但无法编译:
sealed class Expr {
data class Const(val number: Double) : Expr()
data class Sum(val expr1 : Expr, val expr2 : Expr) : Expr()
}
因为数据类不能扩展其他类。
有什么我遗漏的吗?
在进入 Beta 状态前不久,Kotlin 团队决定对 data
classes 的使用 (see this post) 添加某些限制,因为它们在 [=21] 中造成的问题=]层次结构。
其中一个限制是 data
class 不应该子类型另一个 class,只允许接口。因此,data
classes 不能派生自 sealed class
.
这是避免进一步推迟 1.0 发布的必要措施。据说一旦有问题的案例被彻底审查并找到一个好的设计解决方案,一些限制将在未来的版本中取消。