我有两个Class<? extends SomeClass>
变量,通过循环 HashMap
的键获得的变量,我们将其称为 A
,并作为参数传递,我们将其称为 B
。我想看看 B
延伸A
.
因此,根据我目前的理解,我将创建一个 B
的实例(使用 createInstance
)并检查 instanceof
。但这不仅非常慢,而且很麻烦,因为类需要一个空的构造函数。
请参阅here和 here ,他们在那里讨论isAssignableFrom
和getSuperClass
,但是isAssignableFrom
(从我在那里读到的内容)不适用于同一个类(SomeClass.isAssignableFrom(SomeClass) ?),和 getSuperClass
不会爬上树。
有什么方法可以检查是否 B
延伸A
无需创建 B
的实例?
例如:
class SomeClass {}
class ExtendingClassA extends SomeClass {}
class ExtendingClassAB extends ExtendingClassA {}
class ExtendingClassB extends SomeClass {}
boolean ClassExtendsClass(Class<? extends SomeClass> A,Class<? extends SomeClass> B) {
return A.class instanceof B.class;
}
ClassExtendsClass(SomeClass.class, ExtendingClassA.class); //true
ClassExtendsClass(SomeClass.class, ExtendingClassAB.class); //true
ClassExtendsClass(SomeClass.class, ExtendingClassB.class); //true
ClassExtendsClass(ExtendingClassA.class, ExtendingClassB.class); //false
最佳答案
是的。一般来说,检查您认为合适的类型的 API (javadoc)。在这种情况下,那就是 Class 本身,幸运的是 it's there :
Class<?> a = Integer.class;
Class<?> b = Number.class;
System.out.println(b.isAssignableFrom(a));
System.out.println(b.isAssignableFrom(b));
> true
> true
but isAssignableFrom (from what I read there) doesn't work on the same class
在做出假设之前你应该测试这些东西。效果很好。
关于java - 是否可以在不创建实例的情况下检查一个类是否在java中扩展另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65083122/