我在java中寻找一种方法来查找属于某个超类的所有类,并且在该类中引用一个具有已知名称的静态字符串(使用反射?);
public class Bar
extends ObjectInstance
{
public final static String Name = "Foo";
// more
}
从例子中;从ObjectInstance扩展出来的类的出现次数,从所有的,我需要Name的值。我所引用的类是生成的,所以我确定有一个我可以引用的Name元素,但我无法访问生成sourcedata。
答案 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会有更合适的解决方案,但这太过于过度设计了。