ฉันจะทดสอบได้อย่างไรว่าa
เป็นคลาสย่อยของb
?
Class<?> a = A.class;
Class<?> b = B.class;
ฉันจะทดสอบได้อย่างไรว่าa
เป็นคลาสย่อยของb
?
Class<?> a = A.class;
Class<?> b = B.class;
คำตอบ:
คุณกำลังมองหา:
Super.class.isAssignableFrom(Sub.class)
หากคุณต้องการที่จะรู้หรือไม่ว่าClass
ขยายอื่นใช้คลาส # isAssignableFrom (Class) สำหรับตัวอย่างของคุณมันจะเป็น:
if(B.class.isAssignableFrom(A.class)) { ... }
หากคุณสนใจว่าอินสแตนซ์เป็นประเภทใดประเภทหนึ่งหรือไม่ให้ใช้instanceof
:
A obj = new A();
if(obj instanceof B) { ... }
โปรดทราบว่าสิ่งเหล่านี้จะส่งคืนtrue
หากคลาส / อินสแตนซ์เป็นสมาชิกของลำดับชั้นชนิดและไม่ จำกัด เฉพาะความสัมพันธ์ระดับซุปเปอร์คลาส / คลาสย่อยโดยตรง ตัวอย่างเช่น:
// 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
หากคุณต้องการตรวจสอบความสัมพันธ์ระดับซูเปอร์คลาส / คลาสย่อยโดยตรงทิมได้ให้คำตอบเช่นกัน
คุณต้องการทราบว่าb
สามารถกำหนดได้จาก a
:
b.isAssignableFrom(a);
นอกจากนี้หากคุณต้องการทราบว่าa
เป็นคลาสย่อยโดยตรงของb
:
a.getSuperclass().equals(b);
a
และb
จากคำถาม