在Java中访问父类的每个子类

5

我需要实现一种逻辑,即给定一个子类,我需要访问其父类和该父类的所有其他子类(如果有)。在Java反射中,我没有找到任何允许我们访问父类的所有子类的API。有什么办法吗?

例如:

class B extends class A
class C extends class A

现在使用类B,我可以通过调用getSuperClass()找到超类。但是,如果我有父类,即类B和类C,有没有办法找到所有子类?

2
你是被布置了这个具体的问题作为家庭作业,还是被布置了另一个问题,而这个问题是在你实现解决方案的过程中出现的?我问这个问题是因为另一种解决方案可能是采用不同的方法来解决你所设定的问题。 - Stephen C
@Stephen:这是作业的一个要求,与任何其他要求/问题都无关。 - name_masked
3个回答

12

5
你说得对:这方面没有直接的API。我想你可以扫描所有已加载的类,并查看它们是否是给定类的子类。
一个问题:你只能找到已经加载的类。这些方法都无法找到尚未加载的类。

0

您可以使用:

thisObj.getClass().getSuperclass()
thisObj.getClass().getInterfaces()
thisObj.getClass().getGenericInterfaces()
thisObj.getClass().getGenericSuperclass()

我最近编写了一些代码来扫描类的成员,如果这些成员不是基本类型,则也要扫描它们。然而,我没有向上遍历,所以我没有使用上述方法,但我相信它们应该能够满足您的需求。

编辑: 我进行了一个简单的测试,如下:

public class CheckMe {
  public CheckMe() {
  }
}

public class CheckMeToo extends CheckMe {
  public CheckMeToo() {
  }
}
// In main
System.out.println( CheckMeToo.class.getSuperclass() );

// Output
class CheckMe

然后就是编写遍历代码的问题。如果它是参数化的,则可能会有些复杂,但仍然相当可行。

编辑:抱歉没有仔细阅读,让我进一步研究一下。

编辑:似乎没有办法在不扫描 CLASSPATH 中的所有内容并检查对象是否是某个类的实例的情况下完成它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接