除了反射,我别无选择,只能使用该结构访问一组无法修改的类。
但是,使用下面的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 无关。

07-26 04:02