You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:15:26