【发布时间】:2021-10-28 02:07:52
【问题描述】:
我正在学习如何将数组转换为 json 文件并使用 gson 导入该数组。 我有抽象类 Shape;
public abstract class Shape {
private Type typeOfShape;
public abstract double countArea();
public abstract double countCircuit();
}
以及扩展Shape的类Circle、Rectangle、Square,例如Rectangle
public class Rectangle extends Shape {
private double a;
private double b;
public Rectangle(Type type, int a, int b) {
super(type);
this.a = a;
this.b = b;
}
@Override
public double countArea() {
return a * b;
}
@Override
public double countCircuit() {
return a * 2 + b * 2;
}
还有两种方法:
public static List<Shape> importShapeListFromJsonWithGson(String path) throws IOException {
Type listType = new TypeToken<List<Shape>>() {}.getType();
Gson gson = new GsonBuilder().create();
Reader reader = new FileReader(path);
List<Shape> result = gson.fromJson(reader, listType);
return result;
}
public static void exportShapeListToJsonWithGson(List<Shape> list, String path) throws IOException {
Writer writer = new FileWriter(path);
Gson gson = new GsonBuilder().create();
gson.toJson(list, writer);
writer.close();
}
但我在线程“main”中遇到异常 java.lang.RuntimeException: Failed to invoke public Shape() with no args 。 问题是,我正在使用抽象类吗?我试图从形状中删除摘要,然后再编译一次,但我得到的只是形状列表,没有例如“a”或“b”,只有类型。
【问题讨论】:
-
我添加了这个: public Shape() {} public Shape(Type typeOfShape) { this.typeOfShape = typeOfShape; } 但它仍然不起作用
-
我用 objectMapper 及其作品来处理这个问题,但是有没有修改 json 内容的选项?我想在类名(“shapeService.models.Circle”)之前输入 packageName。