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

Kotlin中MyClass类何时存在?伴生对象调用相关技术疑问

关于Kotlin伴生对象与类加载的疑问解答

嘿,这个问题问到点子上了!很多刚接触Kotlin伴生对象的开发者都会有类似的困惑,我来一步步给你讲明白:

为什么不需要先有MyClass实例就能调用create()?

你看到的create()方法并不是MyClass实例的方法,而是属于MyClass的**伴生对象(Companion Object)**的方法。

在Kotlin里,伴生对象是和类绑定在一起的——它属于类本身,而不是类的任何一个实例。当类被加载时,伴生对象就会被初始化,不需要先创建类的实例就能访问它的成员。你代码里的MyClass.create()其实是MyClass.Factory.create()的简写(Kotlin允许省略伴生对象的名称,直接用类名访问),本质是调用伴生对象Factory的方法,自然不需要提前创建MyClass的实例。

MyClass类究竟在何时产生?

在JVM环境下(Kotlin最终会编译成字节码跑在JVM上),类是懒加载的:当第一次触发类的使用时(比如第一次访问它的伴生对象、第一次创建它的实例、第一次引用它的静态成员等),JVM才会加载这个类,完成类的初始化工作(包括初始化伴生对象)。

回到你的代码,当执行val instance = MyClass.create()这一行时:

  • JVM发现要访问MyClass的伴生对象,于是先加载MyClass类
  • 初始化MyClass的伴生对象Factory
  • 调用Factory里的create()方法,在这个方法内部创建并返回MyClass的实例
  • 最后把这个实例赋值给instance变量

简单来说,类的加载发生在你第一次“用到它”的时候,而伴生对象的存在让你可以通过类名直接调用方法,不需要先实例化类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:53