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