companion objects的文档包含以下示例
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
这里 Factory
是伴随对象的名称 . 然后继续说:
可以省略伴随对象的名称,在这种情况下将使用名称Companion:
但是,我没有看到使用伴随对象名称的示例 .
由于每个类只能有一个伴随对象(否则会出现 Only one companion object is allowed per class
错误),这个名字对我来说就像是一些非常无用的语法糖 .
同伴对象的名称实际上可以用于什么?为什么有人会为此使用任何名称呢?
3 回答
您可以使用随播广告的名称:
这个名字对于Kotlin来说可能并不重要,因为你可以在不知道有伴随对象的情况下访问该方法(上面的第一行) . 如果你想更明确地访问这些功能,它更像是一种个人风格 .
但是对于 java interop 它会有所不同,因为您必须通过配套名称访问该功能:
如果您不使用显式名称,则同伴名称为
Companion
,因此可以省略,就像您已经引用的那样 .有时您可能希望在通话中使用明确的名称,在您的示例中为
MyClass.Factory.create()
. 出于名称空间原因可能我也没有看到很多原因 to name a companion 对象 . 除非您关心使用Kotlin代码的Java互操作 . 然后,您需要显式写入随播广告名称 .
您可能关心名称的另一个原因是,当您在其上定义 extension function 时:
在这种情况下,当它具有像
Factory
这样的名称时可以更清楚,在该名称上通过扩展名添加了特定的工厂方法 .