A Scala класс "сопутствующий объект" можно рассматривать как одноэлементный объект с тем же полным именем, что и класс (например, одно и то же имя в том же пакете). Они используются для хранения функций утилиты, общих для всех экземпляров класса, в качестве замены методов Java static
.
Однако в разных местах в документах и в вопросах он говорит, что объекты-компаньоны должны быть определены в одном модуле компиляции. Например, они должны быть определены в одном файле; объекты-компаньоны не могут быть определены для объектов 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.
Это означает, что должно быть различие между классом со своим сопутствующим объектом и просто классом и объектом с тем же (полностью квалифицированным) именем. Что это за различия?