2012-12-14 27 views
10

Sadece bunu sormayı merak ediyorum, belki de anlamsız.Java instanceof sınıf adı

biz gibi, java instanceof kullanıyor: Aşağıda gibi kullanamazsınız neden

if (a instanceof Parent){ //"Parent" here is a parent class of "a" 
} 

:

if (a instanceof Parent.class){ 
} 

ikinci görünümünden daha mantıklı 'örneği' Does sıkı programlama? "Ebeveyn" ve "Parent.class" arasındaki fark nedir?

+0

İlgili http://stackoverflow.com/questions/496928/what-is-the-difference-between-instanceof-and-class-isassignablefrom –

+0

İlgili http://stackoverflow.com/questions/2590640/why-cant -a-class-variable-to-instanceof – PeterMmm

+0

Not: ikinci yaklaşım için, 'Parent.class.isInstance (a)' uygun kontrol olur. – Vulcan

cevap

15

"Üst" ve "ÜstKrk." Arasındaki fark nedir?

ikinci bir sınıfı hazır olan - tip Class<Parent> bir nesne erişmenin bir yoludur.

eski çeşitli durumlarda kullanılan bir sınıfın, sadece adıdır - 'örneği' ikinci görünümünden daha mantıklı mı vs.

döküm statik yöntemler, inşaatçı, çağrılırken sıkı programlama?

Eh dil tanımlanır değil

- Bir türün adını instanceofsadece eserler asla bir ifade. Eğer
if (a instanceof Parent.class) 

o zaman yazabilir mi
bekliyoruz ediyorum yazabilirsiniz edin:

Class<?> clazz = Parent.class; 
if (a instanceof clazz) 

... ve bu sadece Çalışma tarzı değil. Diğer yandan, ise, isterseniz arayabileceğiniz Class.isInstance yöntemini kullanabilirsiniz.

İlk etapta "sıkı programlamanın görünümü" ile ne demek istiyorsunuz?

1

Parent bir sınıftır, bu nedenle ikinci örnek ilk önce daha anlamlı değildir. Örneğin sınıfın bir örneği olup olmadığını soruyorsunuz, a instanceof Parent bunun doğrudan bir ifadesidir.

Parent.class bir örneği Class arasında, bu nedenle derlenmiş ikinci örneği (o instanceof sağ kendisi bir örnek olamaz değil), bu kontrol etmem bile bunu istediğini kontrol etmek.

0

Parent, bir türünün adıdır. Parent.class aslında bir nesneyi ifade eden statik bir değişkendir (özellikle, Class numaralı bir örnek). a'un kendi başına başka bir türün (Class olarak adlandırılmış) bir örneğinin olup olmadığı değil, Parent türünün bir örneği olup olmadığını sormak istersiniz.

0

Parent.class yazdığınızda, bu, Ana sınıfınız için java.lang.Class nesnesi oluşturduğunuz anlamına gelir. if (a instanceof Parent.class){ } Bu sizin için çalışmayacaktır.

Sınıf sınıfına ilgili ayrıntılı bilgi için aşağıdaki bağlantılardan bir göz atın: Sınıf Sınıf
Class

örnekler çalışan bir Java uygulaması sınıfları ve arayüzleri temsil eder. Her dizi, aynı öğe türüne ve boyut sayısına sahip tüm diziler tarafından paylaşılan bir Sınıf nesnesi olarak yansıtılan bir sınıfa aittir. İlkel Java türleri (boolean, bayt, char, kısa, int, uzun, kayan ve çift) ve anahtar kelime boşluğu da Sınıf nesneleri olarak temsil edilir.

0

Statik Parent.class üyesi aslında bir nesnedir. O türü Object bir değişkene atamayı ya da isterse Class yazabilirsiniz: Öte yandan

Object o = Parent.class; 
Class c = Parent.class; 

Parent bir nesne veya bir değişken değildir: Java spec göre, bir Type Name olduğunu.

Cat myCat = new DomesticLonghair(); 
a instanceof myCat; 

... çok aptalca: Parent.class yana

Bunu olsaydı

...

a instanceof Parent.class 

o zaman da bu yapabileceğini fizibil olabilecek bir nesnedir.