【问题标题】:Kotlin: sealed class cannot "contain" data classes? Why?Kotlin:密封类不能“包含”数据类?为什么?
【发布时间】:2016-06-25 13:51:41
【问题描述】:

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

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

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

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

我有什么遗漏吗?

【问题讨论】:

标签: kotlin data-class


【解决方案1】:

在进入 Beta 状态前不久,Kotlin 团队决定对 data 类的使用 (see this post) 添加某些限制,因为它们会在类层次结构中引起问题。

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

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

【讨论】:

  • 感谢您的链接!
  • 所以,也许还有希望 - 感谢您的解释!
  • 如果我没看错,看起来这个限制将在 1.1 中解除(请参阅 this issuethis design document)。
  • @mkobit,正确,这是为 1.1 计划的。但是,为 1.1 版本开发的任何功能仍然可以更改,不为预览版本提供兼容性保证。
  • 这个问题已经修复,现在可以使用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多