Çalışma zamanında bir java sınıfının diğerini genişletip genişletmediği nasıl test edilir?


Yanıtlar:


255

Mı arıyorsun:

Super.class.isAssignableFrom(Sub.class)

84

BirininClass diğerini genişletip genişletmediğini bilmek istiyorsanız , Class # isAssignableFrom (Class) kullanın . Örneğiniz için şöyle olacaktır:

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

Bir örneğin belirli bir türde olup olmadığı ile ilgileniyorsanız, şunu kullanın instanceof:

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

trueSınıf / örnek, tür hiyerarşisinin bir üyesiyse ve üst sınıf / alt sınıf ilişkilerini yönlendirmekle kısıtlayıcı değilse bunların döneceğini unutmayın . Örneğin:

// 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şkilerini kontrol etmek istiyorsanız, Tim de bir cevap verdi.


2
Aslında, B.class.isAssignableFrom (A.class), çünkü A'nın B'nin bir alt sınıfı olup olmadığını bilmek istiyor
meriton

1
Ah evet, bunu değiştireceğim. Genellikle örnekler tam tersidir (A'yı uzatan B).
Rob Hruska

ya kandırdım; -p Ayrıntılı cevap için çok teşekkürler; En net IMO olduğu için Meriton'u kabul ediyorum.
Armand

42

b Şunlardan atanabilir olup olmadığını bilmek istiyorsunuz a:

b.isAssignableFrom(a);

Ek olarak, abunun doğrudan bir alt sınıf olduğunu bilmek istiyorsanız b:

a.getSuperclass().equals(b);

cevap için teşekkürler, ve kullandığınız için teşekkür ave bsorudan
Armand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.