ฉันจะทดสอบได้อย่างไรว่า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จากคำถาม