繁体   English   中英

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

[英]Kotlin: sealed class cannot “contain” data classes? Why?

好了,既然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版本的必要措施。 一旦有问题的案例得到彻底审查并找到了良好的设计解决方案,据说在未来的版本中会解除一些限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM