![](/img/trans.png)
[英]Could not find MessageBodyWriter for response object of type: java.util.LinkedHashMap of media type: application/json
[英]How to access the object value with java.util.LinkedHashMap$EntryIterator type
我需要访问对象类型java.util.LinkedHashMap $ EntryIterator类型的this $ 0字段的值,请参见下图。
物体
Iterator<Entry<String, JsonNode>> ite = data.getFields();
如您所见,我有一个对象“ ite”,我需要访问字段“ this $ 0”的值,如何获取它?
编译器添加了此字段,以在内部类中存储对其外部类的引用(当内部类不是静态的时)。 由于有了这个字段,内部类实例可以访问外部类实例的成员(甚至是私有成员)。
该字段的值由outerClassInstance.new InnerClass()
设置,因此InnerClass
实例中的this$0
将包含与outerClassInstance
引用相同的值。
您不能在类似的代码中直接使用此字段
class Outer{
class Inner{
void test(){
System.out.println(this$0);//this will not compile
}
}
}
但您可以通过反射访问它。 将返回该字段值的方法代码可能类似于
public static Object getOuterInstance(Object inner)
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
Class<?> clazz = inner.getClass();
Field f = clazz.getDeclaredField("this$0");
f.setAccessible(true);//in case of class placed in different package
return f.get(inner);
}
例:
class Outer {
private String name;
public Outer(String name) { this.name = name; }
public String getName() { return name; }
class Inner{}
}
class Demo {
public static void main(String[] args) throws Exception {
Outer o1 = new Outer("foo");
Outer o2 = new Outer("bar");
Inner i1 = o1.new Inner();
Inner i2 = o2.new Inner();
System.out.println(((Outer) getOuterInstance(i1)).getName());
System.out.println(((Outer) getOuterInstance(i2)).getName());
}
public static Object getOuterInstance(Object inner)
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
Class<?> clazz = inner.getClass();
Field f = clazz.getDeclaredField("this$0");
f.setAccessible(true);
return f.get(inner);
}
}
输出:
foo
bar
这意味着我们确实得到了正确的实例。
对于您的示例,您将必须:
ite
迭代器中的每个元素 LinkedHashMap
为Map
或者如果需要更精确的类型LinkedHashMap
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.