2012-01-17 10 views
6

Eventuali duplicati:
Does Java guarantee that Object.getClass() == Object.getClass()?Si può confrontare gli oggetti java.lang.Class con == in Java?

Se ho una classe come

Class<? extends MyObject> aClass = ...; 

posso poi fare:

if (aClass == MySubObject.class) { ... } 

o devo fare

if (aClass.equals(MySubObject.class)) { ... } 

Inoltre, a seguito di conoscere la risposta, mi piacerebbe sapere un riferimento vale a dire in cui questo è definito.

Preferisco utilizzare == se possibile, perché lo trovo più leggibile e più veloce. (Ovviamente non è che molto più leggibile, o che molto più veloce, ma ancora, perché usare una soluzione più complessa, se una soluzione più semplice è disponibile.)

+1

http://stackoverflow.com/questions/3738919/does-java-guarantee-that-object-getclass-object-getclass –

+0

Un altro http://stackoverflow.com/questions/928531/does-java-have -an-is-kind-of-class-test-method –

+0

http://stackoverflow.com/questions/5997801/java-comparing-classes-with-or-equals-is-there-a-difference –

risposta

7

È possibile utilizzare == ma si guadagna nulla, perché questo è esattamente cosa fa Class.equals().

La classe non definisce un metodo di uguale, quindi eredita da Oggetto. Puoi leggere la fonte per vedere questo.

Io uso equals dove possibile, in quanto poi non ho bisogno di pensarci. Quando sto leggendo il codice (incluso il mio codice) non ho ancora bisogno di chiedermi è == lo stesso di equals o non per questa classe.

+5

Sì, tu guadagna qualcosa: '==' è nullo. – yankee

+5

@yankee true, nel qual caso potresti scrivere. 'MySubObject.class.equals (Aclass)' –

5

È possibile confrontare le classi con ==, e questa è la stessa cosa di equals per il caso di Class, ma il tuo esempio suggerisce che si desidera sapere se una classe ha un "is-a" relazione con un altro. Due classi sono uguali solo se sono della stessa classe e chiaramente Vehicle.class != Car.class.

Se vuoi sapere se un Car is-a Vehicle, utilizzare Class#isAssignableFrom.

Problemi correlati