Scala 类的“伴生对象”可以被视为具有与类相同的完全限定名称的单例对象(即同名,在同一个包中)。它们用于保存类的所有实例共有的实用函数,作为 Javastatic
方法的替代品。
但是,在文档和问题的各个地方,它都说必须在同一个编译单元中定义伴随对象。例如,它们必须在同一个文件中定义;不能为 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.
这意味着在类及其伴生对象之间必须有区别,而只是具有相同(完全限定)名称的类和对象。这个区别是什么?