8

considerar algo como esto:¿Cómo obtener la clase de un objeto singleton en tiempo de compilación?

object Singleton 

val cls: Class[Singleton] = ??? 

¿Qué tengo que escribir en lugar de ????

Probé classOf[Singleton], classOf[Singleton.type], Singleton.type, pero nada funcionó.

(Sé, por supuesto, sobre getClass, la versión de tiempo de ejecución de classOf, pero eso no es lo que estoy preguntando.)

Respuesta

6

Aquí una solución, pero no es bonito ...

object Singleton 

val cls : Class[Singleton] = Singleton.getClass.asInstanceOf[Class[Singleton]] 

Editar: completó la solución después de leer otra pregunta/respuesta: Scala equivalent of Java java.lang.Class<T> Object

Nota 1: el borrado de tipo evitaría que esto sea particularmente útil, por ejemplo en la coincidencia de patrones. Vea la pregunta/respuesta de referencia, arriba, para obtener una buena explicación

Nota 2: la bandera scala -explaintypes es bastante útil para comprender los errores de tipo.

HTH

+1

'.asInstanceOf [AnyRef]' no parece ser necesario para que esto funcione. – axel22

+0

¡buen punto! respuesta actualizada, gracias – laher

4

No está solo con este problema. La respuesta es: actualmente no hay forma de evitar un Singleton.getClass. Consulte this comentario para obtener más información sobre por qué classOf[Singleton] no funciona

Cuestiones relacionadas