在kotlin中的对象声明中实例化对象

在kotlin中的对象声明中实例化对象,kotlin,Kotlin,在浏览kotlin的文档时,我发现了这个片段 class MyClass { companion object Factory { fun create(): MyClass = MyClass() } } val instance = MyClass.create() 在第3行中,create函数实例化一个对象MyClass() 然而,在最后一行中,要调用create,我们已经需要MyClass对象(不是吗?) 我的问题是:MyClass是在什么时候出现的?

在浏览kotlin的文档时,我发现了这个片段

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

val instance = MyClass.create()
在第3行中,
create
函数实例化一个对象
MyClass()

然而,在最后一行中,要调用
create
,我们已经需要MyClass对象(不是吗?)


我的问题是:MyClass是在什么时候出现的?

调用
val instance=MyClass.create()
独立于
MyClass
的实例,您只需使用类型作为方法的限定符(就像Java中的
static
方法)。请注意,您也可以编写
MyClass.Factory.create()
,但从Kotlin调用它时,同伴的名称是多余的。

调用
val instance=MyClass.create()
独立于
MyClass
的实例,您只需将该类型用作该方法的限定符即可(这类似于Java中的
静态
方法)。请注意,您也可以编写
MyClass.Factory.create()
,但从Kotlin调用它时,同伴的名称是多余的

然而,在最后一行中,要调用create,我们已经需要MyClass对象(不是吗?)

不,最后一行在
MyClass
的伴生对象上调用
.create()
。伴生对象是一个单独类的实例(它不是
MyClass
),并且在第一次使用该类之前初始化,因此不需要
MyClass
的实例来调用
.create()

注意,从语法上讲,
.create()
是在
MyClass
类名上调用的,而不是在像
MyClass()
构造函数调用或
MyClass
变量这样的普通表达式上调用的

然而,在最后一行中,要调用create,我们已经需要MyClass对象(不是吗?)

不,最后一行在
MyClass
的伴生对象上调用
.create()
。伴生对象是一个单独类的实例(它不是
MyClass
),并且在第一次使用该类之前初始化,因此不需要
MyClass
的实例来调用
.create()


请注意,从语法上讲,
.create()
是在
MyClass
类名上调用的,而不是在像
MyClass()
构造函数调用或
MyClass
变量这样的普通表达式上调用的。

感谢您的帮助性响应。您说:“您还可以编写
MyClass.Factory.create()
”…在这种情况下,是否可以有更多的辅助对象,如
Factory2
Factory3
。等等?不,只允许有一个辅助对象。感谢您的帮助。您说:“您还可以编写
MyClass.Factory.create()
”…在这种情况下,是否可以有更多类似于
Factory2
Factory3
。等等的伴奏对象?不,只允许有一个伴奏对象。感谢您的回答,这很有帮助。我多次阅读了您的回答,但无法获得以下信息:“伴奏对象是单独类的实例(它不是MyClass)在第一次使用类之前进行初始化“这里的单独类是什么?请详细说明实例化的顺序好吗?我是Kotlin的新手。这与在Java中调用静态方法非常相似。感谢您的回答,这很有帮助。我多次阅读了您的回答,但无法获得以下信息:“伴生对象是一个单独类(不是MyClass)的实例,并且在第一次使用该类之前进行了初始化”这里的单独类是什么。您能详细说明一下实例化的顺序吗?我对Kotlin不熟悉。这与在Java中调用静态方法非常相似。