ich die folgende Klasse haben:Reflexion erhalten Bereich der Singleton statischen geschachtelten Klasse
public class A {
private static class B {
private static final B instance = new B();
private ArrayMap<String, Integer> map;
}
}
Ich bin mit Reflexion versucht, die Karte Feld zu erhalten, aber ich verstehe nicht was zu tun ist. Mein aktueller Code ist:
Class<?>[] classes = ainstance.getClass().getDeclaredClasses();
for (Class c : classes) {
if (c.getName().equals("com.foo.A$B")) {
try {
Field f = c.getDeclaredField("instance");
f.setAccessible(true);
Field f1 = c.getDeclaredField("map");
f1.setAccessible(true);
ArrayMap<String, Integer> map;
try {
map = (ArrayMap<String, Integer>) f1.get(f.getType());
System.out.println(map.get("id"));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
Und was funktioniert nicht? Sie sollten lange genug dabei sein, um zu verstehen, wie man "Code nicht funktioniert" -Fragen schreibt. – GhostCat
'f1.get (f.getType())' -> 'f1.get (f.get (null))', vielleicht? Ohne einen Stacktrace ist es schwer zu wissen, was schief läuft. –
'f.getType()' macht nicht viel Sinn. Es sollte "f.getValue (null)" sein. "Static inner" ist ein Widerspruch in sich. – EJP