如何测试一个Java类是否在运行时扩展了另一个?


Answers:


255

您是否在寻找:

Super.class.isAssignableFrom(Sub.class)

84

如果要知道a是否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

如果您要检查直接的超类/子类关系,Tim也提供了答案


2
其实,这B.class.isAssignableFrom(的A.class),因为他想知道如果A是B的子类
梅里

1
是的,我会改变它。通常情况是相反的(B扩展A)。
罗布·赫鲁斯卡

欺骗ya ;-p非常感谢您的详细回答;我接受meriton,因为它是最清晰的IMO。
阿曼德

42

您想知道是否b 可从分配 a

b.isAssignableFrom(a);

另外,如果您想知道那a是的直接子类b

a.getSuperclass().equals(b);

感谢您的回答,也感谢您使用ab回答问题
-Armand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.