Il linguaggio Java Specification mandates che questo metodo viene trattato in modo speciale dal compilatore:
Il metodo getClass
restituisce l'oggetto Class
che rappresenta la classe dell'oggetto.
Un oggetto Class
esiste per ogni tipo di riferimento. Può essere utilizzato, ad esempio, per scoprire il nome completo di una classe, i suoi membri, la sua superclasse immediata e tutte le interfacce implementate.
Il tipo di un'espressione di chiamata di metodo di getClass è Class<? extends |T|>
dove T
è la classe o l'interfaccia ricercata (§15.12.1) per getClass.
Quindi il tipo di ritorno di getClass è il tipo statico (in fase di compilazione) dell'espressione getClass()
viene richiamato su. Per esempio:
String s = "";
Object o = s;
Class<? extends String> sc = s.getClass(); // ok
Class<? extends Object> oc = o.getClass(); // ok
oc = sc; // ok
sc = o.getClass(); // not ok
sc = oc; // not ok
La notazione |X|
è defined nelle specifiche come segue:
Type cancellazione è una mappatura da tipi (eventualmente inclusi tipi parametrici e digitare variabili) ai tipi (che sono tipi non parametrici o digitare variabili). Scriviamo |T|
per la cancellazione di tipo T
. La mappatura cancellazione è definito come segue:
la cancellazione di un tipo parametrico (§4.5) G<T1,...,Tn>
è |G|
.
La cancellazione di un tipo nidificato T.C
è |T|.C
.
La cancellazione di un array di tipo T[]
è |T|[]
.
La cancellazione di una variabile di tipo (§4.4) è la cancellazione del limite più a sinistra.
La cancellazione di ogni altro tipo è il tipo stesso.
Ad esempio, se si ha:
List<String> list = ...;
l'espressione list.getClass()
è di tipo Class<? extends List>
anziché Class<? extends List<String>>
.
La notazione '| X |' è stata utilizzata come _meta-variabile_, segnaposto, al di fuori della sintassi java. In Math on forse userebbe una lettera greca. –