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

Kotlin类转为Object后未按预期执行,请求排查问题

问题原因与解决方案

问题根源

Kotlin的object采用懒初始化机制——只有当你第一次主动访问这个对象(比如调用它的方法、属性,或者直接引用它)时,才会执行它的init代码块完成初始化。你的代码里完全没对MyChallenge2做任何访问操作,所以它的init块根本没执行,自然不会把自己加入challenges集合,onEnable方法也就不会被调用。

解决方法

在main函数里主动访问一次MyChallenge2即可触发它的初始化,哪怕只是简单的引用:

fun main() {
    val myChallenge = MyChallenge()
    MyChallenge2 // 触发object初始化,执行init块
    
    Challenge.enable()
}

修改后运行代码,两个onEnable的输出都会正常打印。

补充说明

如果需要让object在程序启动时就自动初始化(无需主动访问),可以结合@JvmStatic或者在伴生对象里提前引用,但这种场景很少见,按需触发初始化更符合Kotlin的设计原则。

内容的提问来源于stack exchange,提问作者7tzvD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:10:09