Scalaクラスの「コンパニオンオブジェクト」は、クラスと同じ完全修飾名(つまり、同じパッケージ内の同じ名前)を持つシングルトンオブジェクトと見なすことができます。static
これらは、Javaのメソッドの代わりとして、クラスのすべてのインスタンスに共通のユーティリティ関数を保持するために使用されます。
ただし、ドキュメントや質問のさまざまな場所で、コンパニオンオブジェクトを同じコンパイルユニットで定義する必要があると書かれています。たとえば、それらは同じファイルで定義する必要があります。コンパニオンオブジェクトをJavaオブジェクトに定義することはできません。REPLでは、これらは同じ入力行で定義する必要があるため、次の警告メッセージが表示されます。
warning: previously defined class Foo is not a companion to object Foo.
Companions must be defined together; you may wish to use :paste mode for this.
これは、コンパニオンオブジェクトを持つクラスと、同じ(完全に修飾された)名前を持つクラスとオブジェクトだけを区別する必要があることを意味します。この違いは何ですか?