La respuesta de Andy es definitivamente correcta, pero quiero ampliar un poco el tema.
es una sintaxis especial para obtener una instancia de un objeto de clase. Se puede usar cuando solo el tipo está disponible y no hay ninguna instancia del objeto relacionado alrededor. Se puede usar con cualquier nombre de tipo concreto, incluidas matrices y primitivas. Por ejemplo, int.class
es válido.
De esta forma (y de otras maneras) para obtener un objeto Clase están documentadas en el antiguo Sun reflection API docs.
La sintaxis especial .class
a menudo aparece en el uso idiomático como un "token de tipo" en el código genérico. Un literal de clase obtenido con .class
se denomina token de tipo al pasar "entre métodos para comunicar tanto información en tiempo de compilación como de tipo de tiempo de ejecución" (Joshua Bloch's Effective Java 2e, p.142).
¿Hay más información sobre el uso de java de la oferta .class? Entiendo cuál es el resultado de usarlo y demás, pero ¿por qué Java usa esta implementación? ¿Por qué esa sintaxis existe incluso en lugar de simplemente llamar como nuevo MyService()? – Falmarri
No soy un experto, pero sospecho que tiene algo que ver con la arquitectura de Android que trata de minimizar u ocultar la interacción del desarrollador con la creación explícita de objetos de actividad o servicio. No sé específicamente por qué, pero intentaré averiguarlo. –
Generalmente se realiza debido al borrado de tipos de los genéricos de Java. Puede pasar .class a un método con el tipo de parámetro Clase para capturar el tipo de tiempo de ejecución de una clase, ya que no puede hacer mucho con un parámetro genérico. –