Scala object MODULE$

5

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

以下是Scala对象:

object TestScalaObject {
 val TEST_SYMBOL = "*"
 def testMethod(x : String) : String = x
}

编译成两个字节码文件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();
}

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);
}

我可以看到一个public static final TestScalaObject$.MODULE$,但是如果我需要从Java中访问我需要的所有内容,通过TestScalaObject.TEST_SYMBOLTestScalaObject.testMethod(),那它有什么用呢?


1
请参考https://dev59.com/v2025IYBdhLWcg3w6aYX,了解一些相关信息。 - huynhjl
1个回答

11

MODULE$ 保存一个已实例化类的实例。请参考Java中的Singleton模式。我不知道关于它的好资料,所以在此提供Singleton的维基百科词条。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接