Seperti yang telah disebutkan orang lain, Anda tidak dapat mengirimkan variabel kelas ke instanceofkarena variabel kelas mereferensikan instance dari Objek , sedangkan tangan kanan instanceofharus berupa tipe . Artinya, instanceoftidak berarti "y adalah turunan dari Objek x", itu berarti "y adalah turunan dari tipe X". Jika Anda tidak tahu perbedaan antara Objek dan tipe, pertimbangkan:
Object o = new Object();
Di sini, tipenya adalah Object, dan omerupakan referensi ke instance Objek dengan tipe itu. Jadi:
if(o instanceof Object)
valid tapi
if(o instanceof o)
bukan karena odi sisi kanan adalah Object, bukan tipe.
Lebih spesifik untuk kasus Anda, instance kelas bukanlah tipe, itu adalah Objek (yang dibuat untuk Anda oleh JVM). Dalam metode Anda, Classadalah tipe, tetapi clazzmerupakan Objek (yah, referensi ke Objek)
Yang Anda butuhkan adalah cara untuk membandingkan Objek dengan Objek Kelas. Ternyata ini populer jadi ini disediakan untuk Anda sebagai metode Object Kelas: isInstance().
Berikut adalah Java Doc untuk isInstance, yang menjelaskan hal ini dengan lebih baik:
public boolean isInstance(Object obj)
Menentukan apakah Objek yang ditentukan kompatibel dengan tugas dengan objek yang diwakili oleh Kelas ini. Metode ini adalah padanan dinamis dari operator instanceof bahasa Java. Metode ini mengembalikan nilai true jika argumen Objek yang ditentukan adalah bukan nol dan dapat dilemparkan ke tipe referensi yang diwakili oleh objek Kelas ini tanpa memunculkan ClassCastException. Ia mengembalikan false jika tidak.
Secara khusus, jika objek Kelas ini mewakili kelas yang dideklarasikan, metode ini mengembalikan nilai true jika argumen Objek yang ditentukan adalah turunan dari kelas yang diwakili (atau salah satu subkelasnya); itu mengembalikan false jika tidak. Jika objek Kelas ini mewakili kelas larik, metode ini mengembalikan nilai true jika argumen Objek yang ditentukan dapat diubah menjadi objek dari kelas larik dengan konversi identitas atau dengan konversi referensi yang melebar; itu mengembalikan false jika tidak. Jika objek Kelas ini mewakili antarmuka, metode ini mengembalikan nilai true jika kelas atau superclass apa pun dari argumen Objek yang ditentukan mengimplementasikan antarmuka ini; itu mengembalikan false jika tidak. Jika objek Kelas ini mewakili tipe primitif, metode ini mengembalikan nilai salah.
Parameter: obj - objek untuk diperiksa
Returns: true jika obj adalah turunan dari kelas ini
Sejak: JDK1.1