【问题标题】:kotlin declaring Object within sealed class and initializedkotlin 在密封类中声明对象并初始化
【发布时间】:2023-01-26 03:57:21
【问题描述】:
sealed class StockLabel : Label() {
  object OutOfStockLabel : StockLabel()
}

我知道 kotlin 中的密封类是隐式抽象的,如果这样做我们会得到编译错误。但是我看到了上面代码的用法,'OutOfStockLabel' 在'StockLabel' 密封类中也用'StockLabel()' 声明了'OutOfStockLabel',我认为'StockLabel()' 应该是'OutOfStockLabel' 的类型但是是吗在这里进行初始化还是?

需要一些帮助来理解这里的代码案例。

【问题讨论】:

  • 我不确定你问什么。 OutOfStockLabel 只是StockLabel 的子类型,它在其中定义只是为了将其用作命名空间。

标签: kotlin sealed-class


【解决方案1】:

虽然语法看起来很相似,但这段代码:

object OutOfStockLabel : StockLabel()

是定义类的语法,而不是创建抽象类的实例。您正在声明一个子类(在本例中为 object),其主构造函数(对于 object 是隐式的)调用抽象类的构造函数。这对于抽象类是允许的。如果不能,就不可能创建抽象类的任何子类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多