2011-08-04 14 views
5

斯卡拉物件的用途是什麼MODULE $

以下斯卡拉對象:

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

我可以看到一個publicstaticfinal TestScalaObject $ .MODULE $但它是什麼用,如果我可以通過TestScalaObject.TEST_SYMBOLTestScalaObject訪問我需要的一切.testMethod()如果我曾經想要這樣做,從Java

+1

有關相關信息,請參見http://stackoverflow.com/questions/5721046/singletons-as-synthetic-classes-in-scala。 – huynhjl

回答

7

MODULE$持有實例化類的一個實例。請參閱Java中的Singleton模式。我不知道它的好來源,所以這是維基百科條目Singleton