Başkalarının da belirttiği gibi, bir sınıf değişkenini geçiremezsiniz instanceof
çünkü bir sınıf değişkeni bir Object örneğine başvururken , sağ elinin instanceof
bir tür olması gerekir . Yani, instanceof
"y, X Nesnesinin bir örneği" anlamına gelmez, "y, X türünün bir örneğidir" anlamına gelir. Bir Nesne ve bir tür arasındaki farkı bilmiyorsanız, şunları göz önünde bulundurun:
Object o = new Object();
Burada tür Object
, ve o
bu türdeki Object örneğine bir referanstır. Böylece:
if(o instanceof Object)
geçerlidir ama
if(o instanceof o)
değil çünkü o
sağ taraftaki bir nesne değil, bir türüdür üzerinde.
Durumunuza daha özel olarak, bir sınıf örneği bir tür değildir, bir Nesnedir (sizin için JVM tarafından oluşturulur). Yönteminizde Class
bir türdür, ancak clazz
bir Nesnedir (bir Nesneye referans)
İhtiyacınız olan şey, bir Nesneyi bir Sınıf Nesnesi ile karşılaştırmanın bir yoludur. Bu Sınıf Nesne yöntemi olarak size verilir, böylece bu popüler olduğu ortaya çıktı: isInstance()
.
İşte isInstance için Java Dokümanı, bunu daha iyi açıklıyor:
public boolean isInstance(Object obj)
Belirtilen Object'in bu Sınıf tarafından temsil edilen nesneyle atama uyumlu olup olmadığını belirler. Bu yöntem, Java dili örneğinin operatörünün dinamik eşdeğeridir. Belirtilen Object bağımsız değişkeni boş değilse ve bir ClassCastException oluşturmadan bu Class nesnesi tarafından temsil edilen başvuru türüne dönüştürülebilirse yöntem true döndürür. Aksi takdirde yanlış döndürür.
Spesifik olarak, bu Class nesnesi bildirilmiş bir sınıfı temsil ediyorsa, belirtilen Object argümanı temsil edilen sınıfın (veya alt sınıflarından herhangi birinin) bir örneğiyse bu yöntem true değerini döndürür; aksi takdirde yanlış döndürür. Bu Class nesnesi bir dizi sınıfını temsil ediyorsa, belirtilen Object bağımsız değişkeni bir kimlik dönüşümü veya genişleyen bir başvuru dönüşümü ile dizi sınıfının bir nesnesine dönüştürülebiliyorsa bu yöntem true; aksi takdirde yanlış döndürür. Bu Class nesnesi bir arabirimi temsil ediyorsa, belirtilen Object bağımsız değişkeninin sınıfı veya herhangi bir üst sınıfı bu arabirimi uygularsa bu yöntem true değerini döndürür; aksi takdirde yanlış döndürür. Bu Class nesnesi bir ilkel türü temsil ediyorsa, bu yöntem false değerini döndürür.
Parametreler: obj - kontrol edilecek nesne
İade: doğru eğer obj bu sınıfın bir örneğiyse , Bu
yana: JDK1.1