В чем разница между классом с сопутствующим объектом и классом и объектом с тем же именем?

«Компаньон-объект» класса 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.

Это означает, что должно быть различие между классом с сопутствующим ему объектом и просто классом и объектом с одним и тем же (полным )именем. Что это за различие?

13
задан Community 23 May 2017 в 11:50
поделиться