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
相关产品推荐
相关产品推荐

