Wie bereits erwähnt, können Sie eine Klassenvariable nicht übergeben, instanceof
da eine Klassenvariable auf eine Instanz eines Objekts verweist , während die rechte Hand von instanceof
ein Typ sein muss . Das heißt instanceof
nicht, dass "y eine Instanz von Objekt x ist", sondern dass "y eine Instanz vom Typ X ist". Wenn Sie den Unterschied zwischen einem Objekt und einem Typ nicht kennen, beachten Sie Folgendes:
Object o = new Object();
Hier ist Object
und o
ist der Typ ein Verweis auf die Instanz des Objekts mit diesem Typ. So:
if(o instanceof Object)
ist aber gültig
if(o instanceof o)
ist nicht weil o
auf der rechten Seite ein Objekt ist, kein Typ.
Genauer gesagt ist eine Klasseninstanz kein Typ, sondern ein Objekt (das von der JVM für Sie erstellt wird). Ist in Ihrer Methode Class
ein Typ, aber clazz
ein Objekt (also ein Verweis auf ein Objekt)
Sie benötigen eine Möglichkeit, ein Objekt mit einem Klassenobjekt zu vergleichen. Es stellt sich heraus, dass dies beliebt ist, sodass es Ihnen als Methode des Klassenobjekts zur Verfügung gestellt wird : isInstance()
.
Hier ist das Java-Dokument für isInstance, das dies besser erklärt:
public boolean isInstance(Object obj)
Legt fest, ob das angegebene Objekt mit dem von dieser Klasse dargestellten Objekt zuweisungskompatibel ist. Diese Methode ist das dynamische Äquivalent der Java-Sprachinstanz des Operators. Die Methode gibt true zurück, wenn das angegebene Object-Argument nicht null ist und in den Referenztyp umgewandelt werden kann, der durch dieses Class-Objekt dargestellt wird, ohne eine ClassCastException auszulösen. Andernfalls wird false zurückgegeben.
Wenn dieses Klassenobjekt eine deklarierte Klasse darstellt, gibt diese Methode true zurück, wenn das angegebene Objektargument eine Instanz der dargestellten Klasse (oder einer ihrer Unterklassen) ist. Andernfalls wird false zurückgegeben. Wenn dieses Klassenobjekt eine Array-Klasse darstellt, gibt diese Methode true zurück, wenn das angegebene Object-Argument durch eine Identitätskonvertierung oder eine erweiterte Referenzkonvertierung in ein Objekt der Array-Klasse konvertiert werden kann. Andernfalls wird false zurückgegeben. Wenn dieses Class-Objekt eine Schnittstelle darstellt, gibt diese Methode true zurück, wenn die Klasse oder eine Oberklasse des angegebenen Object-Arguments diese Schnittstelle implementiert. Andernfalls wird false zurückgegeben. Wenn dieses Klassenobjekt einen primitiven Typ darstellt, gibt diese Methode false zurück.
Parameter: obj - das zu überprüfende Objekt Rückgabe
: true, wenn obj eine Instanz dieser Klasse ist
Seit: JDK1.1