Jak wspominali inni, nie można przekazać zmiennej klasowej, instanceof
ponieważ zmienna klasowa odwołuje się do instancji Object , podczas gdy prawa ręka instanceof
musi być typem . Oznacza to, instanceof
że nie oznacza „y jest wystąpieniem Obiektu x”, oznacza to „y jest wystąpieniem typu X”. Jeśli nie znasz różnicy między obiektem a typem, rozważ:
Object o = new Object();
Tutaj typ jest Object
i o
jest odwołaniem do wystąpienia Object z tym typem. A zatem:
if(o instanceof Object)
jest ważny, ale
if(o instanceof o)
nie dlatego, że o
po prawej stronie znajduje się Obiekt, a nie typ.
Bardziej specyficznie dla twojego przypadku, instancja klasy nie jest typem, jest to obiekt (który jest tworzony dla ciebie przez JVM). W twojej metodzie Class
jest typem, ale clazz
jest obiektem (cóż, odniesieniem do obiektu)
To, czego potrzebujesz, to sposób na porównanie obiektu z obiektem klasy. Okazuje się, że jest to popularny, więc to jest do was jako metody obiektu klasy: isInstance()
.
Oto dokumentacja Java dla isInstance, która wyjaśnia to lepiej:
public boolean isInstance(Object obj)
Określa, czy określony Object jest zgodny z przypisaniem z obiektem reprezentowanym przez tę klasę. Ta metoda jest dynamicznym odpowiednikiem operatora instanceof w języku Java. Metoda zwraca wartość true, jeśli określony argument Object ma wartość różną od null i może być rzutowany na typ referencyjny reprezentowany przez ten obiekt Class bez zgłaszania ClassCastException. W przeciwnym razie zwraca false.
W szczególności, jeśli ten obiekt Class reprezentuje zadeklarowaną klasę, ta metoda zwraca wartość true, jeśli określony argument Object jest instancją reprezentowanej klasy (lub dowolnej z jej podklas); w przeciwnym razie zwraca false. Jeśli ten obiekt Class reprezentuje klasę tablicy, ta metoda zwraca wartość true, jeśli określony argument Object można przekonwertować na obiekt klasy tablicy przez konwersję tożsamości lub rozszerzającą konwersję odwołania; w przeciwnym razie zwraca false. Jeśli ten obiekt Class reprezentuje interfejs, ta metoda zwraca wartość true, jeśli klasa lub dowolna nadklasa określonego argumentu Object implementuje ten interfejs; w przeciwnym razie zwraca false. Jeśli ten obiekt Class reprezentuje typ pierwotny, ta metoda zwraca false.
Parametry: obj - obiekt do sprawdzenia
Zwraca: true, jeśli obj jest instancją tej klasy
Od: JDK1.1