相关疑难解决方法(0)

反射泛型获取字段值

我试图通过反射接收字段值.问题是我不知道字段类型,必须在获取值时决定它.

此代码导致此异常:

无法将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)

我怎样才能做到这一点?

java reflection

125
推荐指数
6
解决办法
30万
查看次数

使用jackson反序列化lazylist

我有一个对象,它使用一个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的自定义实现的解决方案将充分回答这个问题.

json jackson lazylist deserialization

5
推荐指数
1
解决办法
583
查看次数

标签 统计

deserialization ×1

jackson ×1

java ×1

json ×1

lazylist ×1

reflection ×1