Як вже згадували інші, ви не можете передати змінну класу, instanceof
оскільки змінна класу посилається на екземпляр Об'єкта , тоді як права рука instanceof
має бути типом . Тобто, instanceof
це не означає "y - екземпляр Об'єкта x", це означає "y - екземпляр типу X". Якщо ви не знаєте різниці між об’єктом і типом, розгляньте:
Object o = new Object();
Тут тип є Object
і o
є посиланням на екземпляр Об’єкта з цим типом. Отже:
if(o instanceof Object)
є дійсним, але
if(o instanceof o)
не тому, o
що праворуч знаходиться Об’єкт, а не тип.
Більш конкретно для вашого випадку, екземпляр класу - це не тип, це об’єкт (який для вас створює JVM). У вашому методі Class
є типом, але clazz
є об'єктом (ну, посиланням на об'єкт)
Вам потрібен спосіб порівняти об’єкт із об’єктом класу. Виявляється, що це популярне , так це надається вам в якості методу об'єкта класу: isInstance()
.
Ось Java Doc для isInstance, який пояснює це краще:
public boolean isInstance(Object obj)
Визначає, чи вказаний Об’єкт сумісний із призначенням з об’єктом, представленим цим Класом. Цей метод є динамічним еквівалентом оператора екземпляра мови Java. Метод повертає true, якщо вказаний аргумент Object не є нульовим і може бути переданий до посилального типу, представленого цим об'єктом Class, не викликаючи ClassCastException. Інакше повертає false.
Зокрема, якщо цей об'єкт Class представляє оголошений клас, цей метод повертає true, якщо вказаний аргумент Object є екземпляром представленого класу (або будь-якого з його підкласів); в іншому випадку вона повертає false. Якщо цей об'єкт Class представляє клас масиву, цей метод повертає true, якщо вказаний аргумент Object може бути перетворений в об'єкт класу масиву шляхом перетворення ідентичності або розширення перетворення посилання; в іншому випадку вона повертає false. Якщо цей об'єкт Class представляє інтерфейс, цей метод повертає true, якщо клас або будь-який суперклас зазначеного аргументу Object реалізує цей інтерфейс; в іншому випадку вона повертає false. Якщо цей об'єкт Class представляє примітивний тип, цей метод повертає false.
Параметри: obj - об'єкт для перевірки
Повертає: true, якщо obj є екземпляром цього класу
Since: JDK1.1