fastjson能否支持使用objenesis来创建对象

xu3bshqb  于 2021-11-27  发布在  Java
关注(0)|答案(4)|浏览(366)

即使对象没有默认构造函数,也能方便创建成功。

import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import org.joor.Reflect;
import org.objenesis.Objenesis;
import org.objenesis.ObjenesisStd;

public class FinalClassCreate {
    @ToString @AllArgsConstructor
    public static class FinalBean {
        @Getter private final String name;
    }

    public static void main(String[] args) {
        Objenesis objenesis = new ObjenesisStd(); 
        FinalBean o = objenesis.newInstance(FinalBean.class);  // 能成功创建
        Reflect.on(o).set("name", "bingoo");
        System.out.println(o);

        // 异常:com.alibaba.fastjson.JSONException: default constructor not found. class org.n3r.sandbox.objenesis.FinalClassCreate$FinalBean
        FinalBean finalBean = JSON.parseObject("{name:\"dingoo\"}", FinalBean.class); 
        System.out.println(finalBean);

    }
}
l5tcr1uw

l5tcr1uw1#

为什么有这种需求?能说说你场景么?

o3imoua4

o3imoua42#

本意是期望能创建一个Immutable Bean,一旦创建,不希望属性被修改,多线程保持安全。

ep6jt1vc

ep6jt1vc3#

如果全都要默认构造函数,objenesis这个类库的应用场景也就消失了啊

相关问题