Kotlin密封类内部声明Object并初始化的代码解析求助
Kotlin密封类内部Object声明中
StockLabel()的解析 先看你给出的代码:
sealed class StockLabel : Label() { object OutOfStockLabel : StockLabel() }
核心解释:StockLabel()是调用密封类的构造函数
虽然Kotlin密封类是隐式抽象的,不能直接通过StockLabel()创建它的实例,但这并不意味着它的构造函数不可用——它的子类(包括单例object)可以合法调用这个构造函数来完成继承的初始化。
具体细节拆解
object OutOfStockLabel定义了一个单例对象,这个对象同时继承自StockLabel。这里的:是Kotlin中类继承/接口实现的语法,后面的StockLabel()就是调用父类(密封类)的构造函数,让这个单例对象成为StockLabel的子类实例。- 密封类的构造函数默认是
protected访问权限,内部定义的子类(包括这个object)可以直接访问该构造函数,所以能正常调用初始化。 - 这种写法的意义在于:用密封类限定所有可能的标签类型(这里只有缺货标签一种),后续在使用
StockLabel类型做分支判断时,编译器能识别所有可能的子类,无需写else分支,同时OutOfStockLabel作为单例,全局只有一个实例,避免重复创建对象。
内容的提问来源于stack exchange,提问作者user13902742
相关产品推荐
相关产品推荐

