2010-08-17 18 views

cevap

206

Eğer arıyorsunuz:

Super.class.isAssignableFrom(Sub.class) 
+0

teşekkürler! – trusktr

73

Bir Class başka uzanır olsun veya olmasın öğrenmek istiyorsanız, Class#isAssignableFrom(Class) kullanın. senin Örneğin, olurdu: Bir örneği belirli bir türdeki olup olmadığı ilgileniyorsanız, instanceof kullanmak

if(B.class.isAssignableFrom(A.class)) { ... } 

:

A obj = new A(); 
if(obj instanceof B) { ... } 

Not bu takdirde true dönecek sınıf/örnek türü hiyerarşinin bir üyesidir ve üst sınıf/alt sınıf ilişkilerini yönlendirmek için kısıtlayıcı değildir. Örneğin: yanı

// if A.class extends B.class, and B.class extends C.class 
C.class.isAssignableFrom(A.class); // evaluates to true 
// ...and... 
new A() instanceof C; // evaluates to true 

doğrudan üst sınıf/alt sınıf ilişkileri için kontrol etmek istiyorsanız

, Tim has provided an answer.

+2

Aslında, B.class.isAssignableFrom (A.class), A'nın B alt sınıfının olup olmadığını bilmek istediğinden beri. – meriton

+1

Ah evet, bunu değiştireceğim. Genellikle örnekler diğer yoldan çıkar (B'yi uzatır). –

+0

tricked ya; -p Ayrıntılı cevap için çok teşekkürler; Merintonu kabul ediyorum, en açık IMO olduğu gibi. – Armand

34

bilmek istiyor ais assignable fromb eğer:

b.isAssignableFrom(a); 

Ayrıca, ab doğrudan alt sınıf olduğunu bilmek istiyorum: cevap için

a.getSuperclass().equals(b); 
+0

Cevabınız için teşekkürler ve sorudan “a” ve “b” yi kullandığınız için teşekkürler. – Armand