2012-10-13 13 views
6

Questa è, forse, una domanda stupida, ma non ho trovato nulla su di esso altrove. Sto attraversando le basi di Android, e quando cerco di creare un intento specifico per eseguire un'altra attività di mia scelta, il tutorial mi dice di costruire in questo modo:Quando si crea un intento Android e si specifica l'attività target, qual è la sintassi ".class"?

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

Dove "DisplayMessageActivity" è il classe per l'attività che sto conducendo. Quello che non capisco è, qual è la parte ".class"? Questo parametro, a quanto ho capito, dovrebbe essere un oggetto di classe. "Classificare" un campo della mia sottoclasse Activity? O quando dico "DisplayMessageActivity.class", mi riferisco a un file .class reale (che sembra un po 'strano)?

Qualsiasi aiuto è apprezzato!

risposta

5

Mentre il .class sembra essere un normale accesso al campo, in realtà è un costrutto linguaggio speciale, che è spiegato molto bene nell'esercitazione Java Retrieving Class Objects.

Si dice, testualmente:

Se il tipo è disponibile, ma non c'è nessun caso, allora è possibile ottenere una classe aggiungendo ".class" al nome del tipo. Questo è anche il modo più semplice per ottenere la classe per un tipo primitivo.

e danno l'esempio:

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

Class c = boolean.class; // correct 


Nel mio giorno per giorno l'uso di Java, questo non è un costrutto enormemente utilizzati, e molti non sono a conoscenza di esso. Generalmente è usato con generici e simili quando si specificano le classi in generale piuttosto che le istanze di esse.

Spero che questo aiuti. :)

4

Quello che non capisco è, qual è la parte ".class"? Questo parametro, a quanto ho capito, dovrebbe essere un oggetto di classe.

Che è corretto.

SomeClass.class è in realtà sintassi Java che significa "fornirmi l'oggetto Class corrispondente al tipo SomeClass". E nota che puoi usarlo su qualsiasi tipo ... non solo sui nomi delle classi.

È "classificare" un campo della sottoclasse Attività?

No. Non è un campo. Si potrebbe pensare ad esso come analogo a un campo statico, ma in realtà non è così. (Proprio come someArray.length non è davvero un campo di oggetto array.)

O quando dico "DisplayMessageActivity.class", mi riferisco a un vero e proprio file .class

Si riferisce a a Classoggetto ... non un file ".class".

Problemi correlati