除了反射,我别无选择,只能使用该结构访问一组无法修改的类。
但是,使用下面的main方法中显示的方法将引发NullPointerException。当调用f1.get(null)时,空指针在构造函数中为“表”。
我无法事先实例化这些类,因为唯一的构造函数是所示的那个私有的。因此,我也无法显式设置表。
有人知道我可以反省地称为Legacy.A吗?
public class Legacy {
public static final Legacy A = new Legacy("A");
public static final Legacy B = new Legacy("B");
private String type0;
private static Map<String, Legacy> table = new HashMap<String, Legacy>();
private Legacy(String id) {
type0 = id;
table.put(type0, this);
}
public static void main(String[] args) throws Exception {
Field f1 = Legacy.class.getDeclaredField("A");
Object o = f1.get(null);
}
}
在“反射==不好!”之前
最佳答案
静态初始化程序的顺序错误,表必须在构造函数调用之前出现。
这就是在加载和初始化类时获得异常的原因。这与反射Reflection 无关。