2009-05-22 11 views

risposta

8

La proprietà .class restituisce sempre un oggetto Class. La classe Class (strana) ha un parametro generico. I tipi di parametri generici sono sottoclassi.

Class<String> stringClass = String.class; 
Class<Object> objectClass = Object.class; 

E poiché con i generici, Type<foo> NON è un supertipo di Type<subtype_of_foo> (vedi the Java tutorials), questo significa, che la risposta è "No".

+2

No, i tipi di parametri generici NON sono sottoclassi; sono tutti della stessa classe, a causa della cancellazione dei tipi, i parametri generici non esistono una volta che il compilatore ha fatto la sua cosa. –

+0

Grazie per essere riuscito a esprimere il mio pensiero in parole. Il mio cervello non è del tutto in ordine. Tempo per un po 'di succo di cervello ... –

+0

La classe ha il suo argomento generico ... –

4

oggetti in Java sono tutti della stessa classe.

Si può dire, perché se si guarda al Javadoc si può vedere che il Class class is final.

1

No, non c'è una sola classe con il nome Class. String.class è un'istanza di classe, oltre a Object.class.

0

Il motivo classe non si estende classe anche se Y si estende X è che per ogni tipo generico G, G non si estende G

Si potrebbe desiderare di guardare questo in FAQ, ecc Un sacchetto di mele non è un sacchetto di frutta, anche se la mela è un frutto; perché puoi aggiungere qualsiasi frutto a quest'ultimo, ma solo le mele al primo.

1

provare questo codice:

boolean answer = Object.class.isAssignableFrom(String.class); 
System.out.println(answer); // true! 

però:

Class<Object> string = String.class; <-- compile-time error 
Class<? extends Object> string = String.class; <-- it's ok 
0

Se ho capito bene la tua domanda, non è questo il caso. L'oggetto che rappresenta la classe di java.lang.String, così come qualsiasi altra classe, appartiene sempre alla classe java.lang.Class.

Tenete a mente che java.lang.Class è definito come finale, quindi non è possibile sottoclasse esso.

0

Tutti gli oggetti di classe sono istanze di una classe.

Se volete sapere la gerarchia di una classe è possibile chiamare il getSuperclass() e getInterfaces()

Nota: Potrebbe essere necessario chiamare questi in modo ricorsivo per ottenere tutte le classi e le interfacce eccellenti.

Problemi correlati