У меня не было другого выбора, кроме как получить доступ к набору классов, которые я не могу изменить, с помощью этой структуры через отражение.
Однако, используя метод, показанный ниже в методе main, генерируется исключение NullPointerException. При вызове f1.get (null) нулевой указатель является «таблицей» в конструкторе.
Я не могу создать экземпляры классов заранее, потому что показан только один конструктор, который является закрытым. Поэтому я не могу явно установить таблицу.
Кто-нибудь знает, как я могу рефлексивно назвать Легаси. А?
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);
}
}
В до "Отражение == ПЛОХО !!!"