java - 是否可以在不创建实例的情况下检查一个类是否在java中扩展另一个类?

标签 java inheritance multiple-inheritance

我有两个Class<? extends SomeClass>变量,通过循环 HashMap 的键获得的变量,我们将其称为 A ,并作为参数传递,我们将其称为 B 。我想看看 B延伸A .

因此,根据我目前的理解,我将创建一个 B 的实例(使用 createInstance )并检查 instanceof 。但这不仅非常慢,而且很麻烦,因为类需要一个空的构造函数。 请参阅herehere ,他们在那里讨论isAssignableFromgetSuperClass ,但是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/

相关文章:

c++ - 引用父类(super class)中的子类 (C++)

c++ - 如何从父类转换为子类的接口(interface)

java - Google 自动补全地点、地点名称为纬度/经度

java - java中按类字段对数组进行排序

java - Java中的缓存模拟器,实现数据 block

java - RequestFactory 请求 (AutoBeanCodexImpl.doCoderFor) 永远不会完成并使用 100% cpu

Python继承返回属性错误

c# - 使现有的 Windows 窗体可继承

java - 如何正确配置多个构造函数?

c++ - 重写不共享通用接口(interface)的基类的虚函数