[英]Kotlin: sealed class cannot “contain” data classes? Why?
好了,既然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
类使用上添加某些限制( 请参阅此文章 ),因为它们在类层次结构中引起了问题。
其中一个限制是data
类不应该为另一个类子类型,只允许接口。 因此, data
类不能来自sealed class
。
这是避免进一步推迟1.0版本的必要措施。 一旦有问题的案例得到彻底审查并找到了良好的设计解决方案,据说在未来的版本中会解除一些限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.