2013-11-25 14 views
5

Secondo il Class.getSuperclass() documentation:Perché Class.getSuperclass() talvolta restituisce Object.class?

restituisce la classe che rappresenta la superclasse di detta entità (classe, interfaccia, tipo primitivo o void) rappresentato da questa classe. Se questa classe rappresenta la classe Object, un'interfaccia, un tipo primitivo o vuoto, viene restituito null.

Ma sto vedendo a volte Object.class essere restituito (usando jdk1.7.0_45) - quindi sto avendo per controllare separatamente:

final Class<?> superclass = modelClass.getSuperclass(); 
if ((superclass != null) && (Object.class != superclass)) { 
    // Do stuff with superclasses other than Object. 
} 

È questo un bug Java? C'è un modo migliore per verificare se superclass è un Object?

+0

Nel tuo scenario, tutto è un 'instanceof' un' Object'. Cosa stai cercando di realizzare? –

+0

Non entrerò nei dettagli, ma la riflessione viene utilizzata per scorrere tutti i metodi di una classe e in modo ricorsivo tutti i suoi antenati ad eccezione dell'oggetto. –

+0

Se non entri nei dettagli, allora non sono sicuro di come possa essere di aiuto. Se conosco il tuo intento, forse c'è un modo diverso di fare ciò che stai cercando di fare. –

risposta

7

La documentazione dice che se la classe è java.lang.Object, il suo getSuperclass restituirà null. In altre parole, se si esegue questa

Class objSuper = Object.class.getSuperclass(); 

poi objSuper sarebbe null; questo è esattamente ciò che sta accadendo (demo).

Sembra però, che il vostro modelClass è nonjava.lang.Object, e non è anche un primitivo o un'interfaccia. Pertanto, restituire java.lang.Object ha perfettamente senso, poiché tutte le classi ne ereditano implicitamente.

+0

Ah ora capisco. Hanno ora aggiunto la prima frase della documentazione alla domanda. Ci sono due "Class" a cui si fa riferimento in quella frase e ho pensato erroneamente che la seconda frase pensasse che si riferisse al primo non al secondo. Grazie per il chiarimento. –

1

Il questa classe nella documentazione si riferisce al chiamante del metodo getSuperclass() per quanto ho capito.

Quindi, se il chiamante è la classe Object o un tipo/interfaccia primitiva, la superclasse restituita sarà null che a mio parere è assolutamente sensata.

1

Se avete bisogno di scoprire se Object è una diretta genitore della classe , è possibile utilizzare

System.out.println(YourObject.class.getSuperclass() == Object.class); 

Altrimenti si dovrebbe sapere che alla fine ogni oggetto eredita Object classe. Invece della classe Object, quindi .getSuperclass() restituirà null.

+0

Grazie, stavo cercando questo. : D – DoombringerBG

Problemi correlati