Як вже згадували інші, ви не можете передати змінну класу, 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