我必须实现一个给定子类的逻辑,我需要访问它的父类和该父类的所有其他子类(如果有的话)。我没有在Java Reflection中找到任何允许我们访问父类的所有子类的API。有没有办法做到这一点?
例如:
class B extends class A
class C extends class A
现在使用B类,我可以通过调用getSuperClass()
找到超类。但是,有了父类,即B类和C类
答案 0 :(得分:12)
如果这不是作业(可能不允许第三方图书馆),我会建议Google Reflections'Reflections#getSubTypesOf()
。
Set<Class<? extends A>> subTypes = reflections.getSubTypesOf(A.class);
您可以自己扫描类路径,从ClassLoader#getResources()
开始,将""
作为名称传递给您。
答案 1 :(得分:5)
你是对的:没有直接的API。我想你可以扫描所有加载的类,看看它们是否是给定类的子类。
一个问题:您只能找到已加载的类。这些方法都不会找到尚未加载的类。
答案 2 :(得分:-1)
您可以使用:
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中的所有内容并检查以确保某个对象是某个类的实例,似乎没有任何方法可以执行此操作。