2013-09-02 12 views
6

Was bedeutet "dynamisches Äquivalent"?Was bedeutet es isInstance ist ein 'dynamisches Äquivalent' von instanceof?

Ich frage mich nur, was ist der Zweck von this.getClass().isInstance(aClass) anstelle von this instanceof aClass? Ist da ein Unterschied?

Bestimmt, ob das angegebene Objekt zu dem Objekt, das von dieser Klasse repräsentiert wird, zuweisungskompatibel ist. Diese Methode ist das dynamische Äquivalent der Java-Sprache instanceof Operator

Antwort

11

Ja. Nicht nur ist die Reihenfolge nicht gleich, sondern object instanceof Clazz muss eine Klasse haben, die zum Zeitpunkt der Kompilierung bekannt ist. clazz.isInstance(object) kann eine Klasse nehmen, die zur Laufzeit bekannt ist.

Es gibt auch einen subtilen Unterschied darin, dass isInstance automatisch box, aber instanceof nicht.

z.B.

10 instanceof Integer // does not compile 
Integer.class.isInstance(10) // returns true 

Integer i = 10; 
if (i instanceof String) // does NOT compile 
if (String.class.isInstance(i)) // is false 

Um den Unterschied zu sehen, schlage ich vor, Sie versuchen, sie zu verwenden.

Hinweis: Wenn Sie das tun object.getClass().getClass() oder myClass.getClass() Sie werden nur Class Vorsicht erhalten nicht getClass() zu rufen, wenn Sie nicht brauchen.

4

Der Operator instanceof prüft, ob ein Objekt eine Instanz einer festen (statischen) Klasse ist; eine Klasse, deren Name zur Kompilierungszeit bekannt ist.

Die Methode Class.isInstance ermöglicht es Ihnen, mit einer dynamischen Klasse zu testen. eine Klasse, die nur zur Laufzeit bekannt ist.


Ich frage mich nur, was der Zweck this.getClass().isInstance(aClass) zu haben, anstatt this instanceof aClass ist? Ist da ein Unterschied?

Der Zweck von isInstance ist wie oben.

Der Hauptunterschied zwischen diesen beiden Ausdrücken ist:

  • in dem ersten, aClass ein variable dessen Wert ein Class Objekt und

  • in dem zweiten, aClass ist der Name einer Klasse: es kann keine Variable sein.

Verwandte Themen