2012-10-13 190 views
6

Esto es, tal vez, una pregunta estúpida, pero no he encontrado nada en él en otro lugar. Voy a través de los conceptos básicos de Android, y cuando intento crear una intención específica para ejecutar otra actividad de mi elección, el tutorial me dice para construir de esta manera:Al crear un intento de Android y especificar la actividad de destino, ¿qué es esta sintaxis ".class"?

Intent intent = new Intent(this, DisplayMessageActivity.class); 

Donde "DisplayMessageActivity" es la clase para la actividad que estoy ejecutando. Lo que no entiendo es, ¿cuál es la parte de "clase"? Ese parámetro, según lo entiendo, se supone que es un objeto de Clase. ¿Es "clase" un campo de mi subclase de actividad? O cuando digo "DisplayMessageActivity.class", ¿me refiero a un archivo .class real (que parece un poco raro)?

¡Se agradece cualquier ayuda!

Respuesta

5

Si bien el .class parece ser un acceso de campo normal, en realidad es una construcción de lenguaje especial, que se explica muy bien en el tutorial de Java Retrieving Class Objects.

Se dice, cito:

Si el tipo está disponible, pero no hay ninguna instancia, entonces es posible obtener una clase añadiendo ".class" al nombre del tipo. Esta es también la forma más fácil de obtener la Clase para un tipo primitivo.

Y dan el ejemplo:

boolean b; 
Class c = b.getClass(); // compile-time error 

Class c = boolean.class; // correct 


En mi día a día de uso de Java, esto no es una construcción utilizada enormemente, y muchos no son conscientes de ello. Generalmente se usa con genéricos y similares cuando se especifican clases en general en lugar de instancias de ellas.

Espero que esto ayude. :)

4

Lo que no entiendo es, ¿cuál es la parte ".class"? Ese parámetro, según lo entiendo, se supone que es un objeto de Clase.

Eso es correcto.

La SomeClass.class es en realidad la sintaxis de Java que significa "dame el objeto Class que corresponde al tipo SomeClass". Y tenga en cuenta que puede usarlo en cualquier tipo ... no solo nombres de clase.

¿La "clase" es un campo de mi subclase Actividad?

No. No es un campo. Se podría pensar que es análogo a un campo estático, pero en realidad no es tal. (Al igual que someArray.length no es realmente un campo del objeto de matriz.)

O cuando digo "DisplayMessageActivity.class", me refiero a un archivo .class real

Se refería a un Classobjeto ... no es un archivo ".class".

Cuestiones relacionadas