Jak wspominają inni, nie można przekazać zmienną do klasy instanceof
ponieważ klasa zmienne odniesienia wystąpienie Object, podczas gdy prawa ręka instanceof
musi być typ. Oznacza to, że instanceof
nie oznacza "y jest instancją Obiektu x", to znaczy "y jest instancją typu X". W przypadku, gdy nie zna różnicy między obiektem i typu, należy rozważyć:
Object o = new Object();
Tutaj typ jest Object
i o
jest odwołaniem do wystąpienia obiektu z danego typu. Zatem:
if(o instanceof Object)
jest ważna ale
if(o instanceof o)
nie dlatego o
na prawej stronie jest przedmiotem, a nie typu.
Specyficzna dla twojego przypadku instancja klasy nie jest typem, jest to obiekt Obiekt (który jest tworzony dla ciebie przez JVM). W Twojej metodzie Class
jest typem, ale jest Obiektem (dobrze, odniesienie do Obiektu). Okazuje się, że jest to popularne, więc przekazujemy je jako metodę klasy Object: isInstance()
.
Oto Java Doc dla isinstance, która wyjaśnia to lepiej:
public boolean isInstance(Object obj)
Określa, czy określony obiekt jest przypisanie zgodny z przedmiotem reprezentowanym przez tę klasę. Ta metoda jest dynamicznym odpowiednikiem operatora instanceof języka Java. Metoda zwraca wartość true, jeśli podany argument Object ma wartość inną niż null i można go rzutować na typ odniesienia reprezentowany przez ten obiekt Class bez podwyszenia wyjątku ClassCastException. W przeciwnym razie zwraca false.
W szczególności, jeśli ten obiekt klasy reprezentuje zadeklarowaną klasę, ta metoda zwraca wartość true, jeśli podany argument Object jest instancją klasy reprezentowanej klasy (lub którejkolwiek z jej podklas); w przeciwnym razie zwraca wartość false . Jeśli ten obiekt klasy reprezentuje klasę tablicową, ta metoda zwraca wartość true, jeśli określony argument Object może zostać przekonwertowany na obiekt klasy tablicowej przez konwersję tożsamości lub przez poszerzoną konwersję referencyjną o numer ; w przeciwnym razie zwraca false. Jeśli ten obiekt klasy reprezentuje interfejs, ta metoda zwraca wartość true, jeśli klasa lub jakakolwiek nadklasa klasy podanego argumentu Object implementuje ten interfejs; zwraca wartość false w przeciwnym razie. Jeśli ten obiekt klasy reprezentuje typ pierwotny , ta metoda zwraca wartość false.
Parametry: obj - obiekt do sprawdzenia
Powroty: true jeśli obj jest instancją tej klasy
od: zestawu JDK 1.1
Znam kod jest całkowicie bezużyteczny , Chcę tylko zademonstrować moje zamieszanie :) – eric2323223
'Integer' to ** not ** a literal class. 'Integer.class' będzie literałem klasy (zobacz § 15.8.2 z JLS: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.2). Operator 'instanceof' pobiera" ReferenceType "(inaczej nazwa typu), jak określono w § 15.20.2 JLS: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html# 15.20.2 –
Użyłbym 'clazz.isInstance (obj)', ponieważ obiekt został już dostarczony. –