以下Scala对象:
object TestScalaObject { val TEST_SYMBOL = "*" def testMethod(x : String) : String = x }
编译成两个字节码文件TestScalaObject.class和TestScalaObject $.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); }
我可以看到一个公共的静态最终TestScalaObject $.MODULE $但如果我可以通过TestScalaObject.TEST_SYMBOL和TestScalaObject.testMethod()访问我需要的所有内容,如果我想从Java那样做的话
MODULE $拥有实例化类的实例.请参阅Java中的Singleton模式.我不知道它有什么好的来源,所以这里是 Singleton的维基百科条目.
精彩评论