为什么 '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 之外不会提供任何功能。您仍然可以将一个对象嵌套在另一个对象中以组织您的代码。