为什么 'companion' 不适用于对象内部?
Why 'companion' is not applicable inside object?
我正在尝试理解一个对象(单例)不能有内部伴侣的原因。例如,未编译以下代码:
object JustAClass
{
companion object justACompanion
{
fun justAFunc() {
}
}
}
因为:
Modifier 'companion' is not applicable inside object
但是 如果我省略了 companion 代码正在编译。
companion object
是 class 的所有实例的共同点。 object
- 是单例,因此“class 的所有实例”==“这唯一的实例”。所以在 object
中声明 companion object
没有意义,只需将所有应该在伴随对象中的成员直接声明为 object
:
的成员
object JustAClass {
fun justAFunc() {
}
}
无论如何,它们在语法上的访问方式是相同的:
JustAClass.justAFunc()
伴随对象只是一个嵌套对象,可以通过其容器 class 的名称作为快捷方式进行引用。如果容器 class 是一个对象,这就没有意义,因为外部对象的名称就是您引用它的方式。没有办法区分它们,因此将嵌套对象标记为 companion
除了隐式名称 Companion
之外不会提供任何功能。您仍然可以将一个对象嵌套在另一个对象中以组织您的代码。
我正在尝试理解一个对象(单例)不能有内部伴侣的原因。例如,未编译以下代码:
object JustAClass
{
companion object justACompanion
{
fun justAFunc() {
}
}
}
因为:
Modifier 'companion' is not applicable inside object
但是 如果我省略了 companion 代码正在编译。
companion object
是 class 的所有实例的共同点。 object
- 是单例,因此“class 的所有实例”==“这唯一的实例”。所以在 object
中声明 companion object
没有意义,只需将所有应该在伴随对象中的成员直接声明为 object
:
object JustAClass {
fun justAFunc() {
}
}
无论如何,它们在语法上的访问方式是相同的:
JustAClass.justAFunc()
伴随对象只是一个嵌套对象,可以通过其容器 class 的名称作为快捷方式进行引用。如果容器 class 是一个对象,这就没有意义,因为外部对象的名称就是您引用它的方式。没有办法区分它们,因此将嵌套对象标记为 companion
除了隐式名称 Companion
之外不会提供任何功能。您仍然可以将一个对象嵌套在另一个对象中以组织您的代码。