Was ist der Unterschied zwischen einer Klasse mit einem Begleitobjekt und einer Klasse und einem Objekt mit demselben Namen?

Das "Companion-Objekt" einer Scala-Klasse kann als Singleton-Objekt mit demselben vollständig qualifizierten Namen wie die Klasse angesehen werden (d. H. Mit demselben Namen in demselben Paket). Sie werden verwendet, um für alle Instanzen der Klasse gemeinsame Dienstprogrammfunktionen als Ersatz für die von Java zu speichernstatic Methoden.

An verschiedenen Stellen in den Dokumenten und in den Fragen heißt es jedoch, dass Begleitobjekte in derselben Kompilierungseinheit definiert werden müssen. Beispielsweise müssen sie in derselben Datei definiert sein.Begleitobjekte können nicht für Java-Objekte definiert werden; In der REPL müssen sie in derselben Eingabezeile definiert werdenDaher die Warnmeldung:

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.

Dies impliziert, dass zwischen einer Klasse mit ihrem Begleitobjekt und einer Klasse und einem Objekt mit demselben (vollständig qualifizierten) Namen unterschieden werden muss. Was ist dieser Unterschied?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage