Scala对象MODULE $

dim*_*sli 5 scala

Scala对象MODULE $的目的是什么?

以下Scala对象:

object TestScalaObject {
 val TEST_SYMBOL = "*"
 def testMethod(x : String) : String = x
}
Run Code Online (Sandbox Code Playgroud)

编译成两个字节码文件TestScalaObject.classTestScalaObject $ .class,如果我反汇编以获得我得到的等效Java代码:

TestScalaObject.class:

public final class TestScalaObject extends java.lang.Object{
    public static final java.lang.String testMethod(java.lang.String);
    public static final java.lang.String TEST_SYMBOL();
}
Run Code Online (Sandbox Code Playgroud)

TestScalaObject $ .class:

public final class TestScalaObject$ extends java.lang.Object implements scala.ScalaObject{
    public static final TestScalaObject$ MODULE$;
    public static {};
    public java.lang.String TEST_SYMBOL();
    public java.lang.String testMethod(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

我可以看到一个public static finalTestScalaObject $ .MODULE $但如果我可以通过TestScalaObject.TEST_SYMBOLTestScalaObject.testMethod()访问我需要的所有内容,如果我想从Java那里做到这一点

Bra*_*ord 9

MODULE$拥有实例化类的实例.请参阅Java中的Singleton模式.我不知道它有什么好的来源,所以这里是Singleton的维基百科条目.