2011-08-04 15 views
5

¿Cuál es el propósito del objeto Scala MÓDULO $?

El siguiente objeto Scala:

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

compila en dos archivos de código de bytes TestScalaObject.class y TestScalaObject $ .class, que si yo desmonte para obtener el código equivalente Java me sale:

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

puedo ver un publicstaticfinal TestScalaObject $ $ .module pero lo que es lo utiliza si puedo acceder a todo lo que necesito a través TestScalaObject.TEST_SYMBOL y TestScalaObject .testMethod() si alguna vez quise hacer eso desde Java

+1

Consulte http://stackoverflow.com/questions/5721046/singletons-as-synthetic-classes-in-scala para obtener información relacionada. – huynhjl

Respuesta

7

MODULE$ contiene una instancia de la clase instanciada. Ver el patrón Singleton en Java. No sé de una buena fuente para él, así que aquí está la entrada de Wikipedia para Singleton.

Cuestiones relacionadas