2011-08-04 9 views
5

Scalaオブジェクトの目的は何ですかMODULE $

次のScalaオブジェクト:

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

私は同等のJavaコードを取得するために分解した場合、私は取得2つのバイトコードファイルTestScalaObject.classTestScalaObject $ .classファイルにコンパイル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のためのWikipediaエントリーがあります。