[数据格式转换报错 can‘t create non-static inner class instance. 原因 ]

目录

 原因: 

测试小问题:


 

 原因: 

这个错误通常是因为在使用Gson或Jackson等JSON解析库将JSON字符串转换为Java对象时,Java对象中包含了非静态内部类(即嵌套类),而解析库无法创建非静态内部类的实例导致的。

非静态内部类是依赖于外部类的实例存在的,因此在创建非静态内部类的实例时,需要先创建外部类的实例。而JSON解析库在创建Java对象时,只会调用Java类的默认构造函数来创建对象,而不会创建外部类的实例,因此无法创建非静态内部类的实例。

解决这个问题的方法有两种:

  1. 将非静态内部类改为静态内部类或单独的外部类,这样就可以直接创建对象了。

  2. 自定义一个JsonDeserializer来处理非静态内部类的反序列化。具体来说,需要在JsonDeserializer中手动创建外部类的实例,并将其传递给非静态内部类的构造函数来创建对象。以下是一个示例代码:

public class MyDeserializer implements JsonDeserializer<MyClass> {
    @Override
    public MyClass deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String name = jsonObject.get("name").getAsString();
        int age = jsonObject.get("age").getAsInt();
        JsonObject innerObject = jsonObject.get("inner").getAsJsonObject();
        InnerClass inner = context.deserialize(innerObject, InnerClass.class);
        MyClass myClass = new MyClass(name, age, inner);
        myClass.setOuter(new OuterClass());
        return myClass;
    }
}

测试小问题:

我在一个test类 里面 创建了main方法, 然后创建了一个内部类 A

然后main方法 里面把data Object数据转为指定的A对象格式 映射,  A内部类没有加上Static(没注意给啥时候 static 被我弄掉了, 大意了)

JSON.toJSONString(data), A.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是汤圆丫

怎么 给1分?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值