2012-10-03 11 views
6
class A { 
} 

class B extends A { 
} 

class TestType { 
    public static void main(String args[]) { 
     A a = new B(); 
     // I wish to use reference 'a' to check the Reference-Type which is 'A'. 
    } 
} 

IS è possibile? Se no, quindi specificare il motivo.Controllare il nome della classe di riferimento in possesso di un oggetto in Java

+7

Non è possibile. Il tipo statico di variabili locali non viene mantenuto nel bytecode, né in fase di runtime. (Se si tratta di un campo, è possibile utilizzare il reflection sulla classe contenente il campo per ottenere il tipo di campo.) –

+1

@ ChrisJester-Young Si dovrebbe fare una risposta invece di un commento. – Jesper

risposta

1

Se si chiama a.getClass(), restituirà sempre l'istanza di classe da cui è stato creato questo oggetto. Nel tuo caso è B quindi ti restituirà B.class.

Ora se si desidera chiamare il metodo su a e ottenere la classe come A.class, non sarà possibile farlo normalmente.

Una via d'uscita sarebbe definire il metodo in A

public static Class<A> getType() { 
     return A.class; 
    } 

e poi si può chiamare a.getType() che è A.class. Stiamo facendo uso del metodo statico qui perché non sono sovrascritti.

+0

Ma questo metodo dovrebbe essere aggiunto ad ogni classe per coerenza, quindi quando getType è chiamato il metodo verrebbe chiamato per la classe 'B'. – Ankur

+0

Aggiornamento della risposta per utilizzare metodi statici. –

+0

Sì, la soluzione ha funzionato. :) Era una soluzione molto elegante e semplice. – Amber

2

Controllare il nome della classe di riferimento in possesso di un oggetto in Java

Non è possibile.

  1. Non esiste una cosa come 'il riferimento possesso di un oggetto. Potrebbero esserci zero riferimenti di questo tipo, o potrebbero essercene trenta miliardi.

  2. Non è possibile recuperarlo dall'interno dell'oggetto in attesa.

Problemi correlati