使用Java 7查找属于超类的所有类

时间:2014-07-31 13:46:55

标签: reflection java-7

我在java中寻找一种方法来查找属于某个超类的所有类,并且在该类中引用一个具有已知名称的静态字符串(使用反射?);

public class Bar
extends ObjectInstance
{
   public final static String Name = "Foo";

   // more 
}

从例子中;从ObjectInstance扩展出来的类的出现次数,从所有的,我需要Name的值。我所引用的类是生成的,所以我确定有一个我可以引用的Name元素,但我无法访问生成sourcedata。

2 个答案:

答案 0 :(得分:0)

或许与How do you find all subclasses of a given class in Java?

相同的问题

这支持了我最初的感觉,这只能像IDE那样做:通过扫描树上的所有内容,随时建立你的关系。

答案 1 :(得分:0)

没办法。

一个失败的解决方案:

publc abstract class ObjectInstance {

    public abstring String name();

    private static Map<String, Class<? extends ObjectInstance> klasses =
            new HashMap<>();

    protected ObjectInstance() {
        classes.put(name(), getClass());
    }

仅收集实例化的类!所以失败了。 想要使用return "foo";的函数提供名称。 收集课程。

有两个令人不满意的解决方案:

反过来说:将名称用作工厂模式:

enum Name {
    FOO(Bar.class),
    BAZ(Baz.class),
    QUX(Qux.class),
    BAR(Foo.class);

    public final Class<ObjectInstance> klass;

    private Name(Class<ObjectInstance> klass) {
        this.klass = klass;
    }
}

也许作为工厂来创建实例。

使用类注释,并进行编译时扫描:

@ObjectInstanceName("foo")
public class Bar extends ObjectInstance {
}

如何将此应用于您的案例:实验。

使用您自己的ClassLoader会有更合适的解决方案,但这太过于过度设计了。