2012-03-09 10 views
46

Me pregunto cómo obtener un objeto de clase para un tipo de objeto en Scala. Ok, esa es una boca llena debido al doble significado de objeto. Así que aquí un ejemplo que se producirá un error:Cómo obtener el classOf para un tipo de objeto scala

object Main 
{ 
    private [this] val TAG = classOf [Main].getName; 
} // Main 

Si Main era la clase que funciona perfectamente. ¿Algunas ideas?

Respuesta

67
scala> Main.getClass 
res1: java.lang.Class[_] = class Main$ 
+1

Sí. Ya veo, ahora todo se vuelve claro. 'object's tiene exactamente una instancia y por lo tanto llama a' getClass'. Gracias. – Martin

+4

@Martin En realidad, diría que eso es incorrecto. 'objeto's no tienen _instancias en absoluto, porque no son tipos; son _las_ únicas instancias de clases (compiladas por el compilador), y es por eso que puedes llamar a 'getClass'. –

+3

¿Es su una manera de hacer esto como una constante de tiempo de compilación para que se pueda utilizar para un atributo de anotación de Java de tipo Clase? –

6

Dado que Main es un objeto, para que su ejemplo funcione, simplemente reemplace su línea de asignación con;

private [this] val TAG = this.getClass.getName; 
14

La razón por la classOf[Main] no funciona es porque Main no es un tipo .

Las clases y los rasgos definen los tipos, los objetos no.

Cuestiones relacionadas