[数据格式转换报错 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);

猜你喜欢

转载自blog.csdn.net/sqL520lT/article/details/131540354