Die instanceof
Schlüsselwort, wie die anderen Antworten beschrieben, in der Regel ist das, was Sie wollen. Beachten Sie, dass instanceof
true
auch für Superklassen zurückgibt.
Wenn Sie sehen möchten, ob ein Objekt eine direkte Instanz einer Klasse ist, können Sie die Klasse vergleichen. Sie können das Klassenobjekt einer Instanz über getClass()
abrufen. Und Sie können über ClassName.class
statisch auf eine bestimmte Klasse zugreifen.
So zum Beispiel:
if (a.getClass() == X.class) {
// do something
}
Im obigen Beispiel ist die Bedingung wahr, wenn a
eine Instanz von X
ist, aber nicht, wenn a
ist eine Instanz einer Unterklasse von X
.
Zum Vergleich:
if (a instanceof X) {
// do something
}
Im instanceof
Beispiel ist die Bedingung erfüllt, wenn a
eine Instanz von X
ist, oder wenn a
ist eine Instanz einer Unterklasse von X
.
Die meiste Zeit, instanceof
ist richtig.
oder besser noch, verwenden IsAssignableFrom (Class):
Sie dann die Methode als aufrufen – Chii
@Chii Aber dann müssen Sie 'getClass' erneut auf' a'aufrufen, was der Backhand versucht zu vermeiden. – gdejohn
nein - alles, was Sie brauchen, sind Verweise auf die Klassen, die Sie vergleichen möchten - a.getClass(). IsAssignableFrom (MyClass.class) oder andersherum. – Chii