我试图通过反射接收字段值.问题是我不知道字段类型,必须在获取值时决定它.
此代码导致此异常:
无法将java.lang.String字段com .... fieldName设置为java.lang.String
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objectValue = targetType.newInstance();
Object value = field.get(objectValue);
Run Code Online (Sandbox Code Playgroud)
我试图施放,但我得到编译错误:
field.get((targetType)objectValue)
Run Code Online (Sandbox Code Playgroud)
要么
targetType objectValue = targetType.newInstance();
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个对象,它使用一个org.apache.commons.collections.list.LazyList字段,它是序列化的ti JSON.JSON看起来像这样:
"myObject": ["org.apache.commons.collections.list.LazyList", [
{
"attr1": "asdasd",
"attr2": 1234
}
]],
Run Code Online (Sandbox Code Playgroud)
对象字段如下所示:
List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory)
Run Code Online (Sandbox Code Playgroud)
然而,尝试使用Jackson ObjectMap反序列化上述JSON失败了,因为它无法找到LazyList的默认构造函数 - 这是有道理的.但是,如何指定此字段的反序列化方式?
错误信息:
没有[集合类型的默认构造函数; class org.apache.commons.collections.list.LazyList,包含[simple type,class foo.bar.MyObject]]
赏金约束:
要收集赏金,需要使用自定义jackson反序列化器来回答这个问题 - 自定义反序列化器必须不是特定于字段的!因此,没有使用特定类型的LazyList的自定义实现的解决方案将充分回答这个问题.