Java 单例静态嵌套类的反射get字段
我有以下课程:Java 单例静态嵌套类的反射get字段,java,reflection,Java,Reflection,我有以下课程: public class A { private static class B { private static final B instance = new B(); private ArrayMap<String, Integer> map; } } 公共A类{ 专用静态B类{ 私有静态最终B实例=新B(); 私有数组映射; } } 我正在尝试使用反射来获取地图字段,但我不明白 怎么办。我目前的代码是:
public class A {
private static class B {
private static final B instance = new B();
private ArrayMap<String, Integer> map;
}
}
公共A类{
专用静态B类{
私有静态最终B实例=新B();
私有数组映射;
}
}
我正在尝试使用反射来获取地图字段,但我不明白
怎么办。我目前的代码是:
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();
}
}
}
Class[]classes=ainstance.getClass().getDeclaredClasses();
用于(c类:类){
if(c.getName().equals(“com.foo.A$B”)){
试一试{
字段f=c.getDeclaredField(“实例”);
f、 setAccessible(true);
字段f1=c.getDeclaredField(“地图”);
f1.设置可访问(真);
阵列地图;
试一试{
map=(ArrayMap)f1.get(f.getType());
System.out.println(map.get(“id”);
}捕获(非法访问例外e){
e、 printStackTrace();
}
}捕获(无此字段例外){
e、 printStackTrace();
}
}
}
之后
Field f = c.getDeclaredField("instance");
f.setAccessible(true);
需要获取实例
对象:
Object instance = f.get(null); // null as static, no 'this'.
map也一样,现在不是null,而是实例
map = (ArrayMap<String, Integer>) f1.get(instance);
map=(ArrayMap)f1.get(实例);
可以删除泛型类型参数。什么不起作用?您应该有足够的时间来理解如何编写“代码不工作”问题。f1.get(f.getType())
->f1.get(f.get(null))
?没有stacktrace,很难知道出了什么问题。f.getType()
没有多大意义。它应该是f.getValue(null)
“静态内部”在术语上是矛盾的。@EJP它不是我的代码,所以我不能做任何事情map=(ArrayMap)f1.get(f.getType())代码>似乎有点可疑…但很难说这段代码应该做什么。非常感谢,它成功了。