私は次のクラスを持っています:
public class A {
private static class B {
private static final B instance = new B();
private ArrayMap<String, Integer> map;
}
}
リフレクションを使用してマップフィールドを取得しようとしていますが、どうすればよいかわかりません。私の現在のコードは次のとおりです。
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();
}
}
}
後
Field f = c.getDeclaredField("instance");
f.setAccessible(true);
instance
オブジェクトを取得する必要があります。
Object instance = f.get(null); // null as static, no 'this'.
次に、マップについても同じですが、nullではなく、instance
です。
map = (ArrayMap<String, Integer>) f1.get(instance);
ジェネリック型パラメーターを削除することができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加