Java如何在模型类内部完成类内列表的初始化并添加元素
问题根因
- 你之前报错的核心原因是:
list.add()属于执行语句,不能直接放在类的成员定义区域,必须放在构造方法、实例初始化块或者普通成员方法中,Java不允许类结构下直接出现可执行语句。 - 此外你现有模型类存在结构缺失:顶层
Overallobject类只定义了静态内部类,没有声明和JSON根节点对应的object1、object2等成员变量,无法正确匹配JSON结构完成序列化反序列化。
实现代码
修改后可直接在模型类内部完成列表初始化与默认元素添加的完整代码如下:
import java.util.ArrayList; import java.util.List; public class OverallObject { // 补充JSON根节点对应成员变量 private Overallobject overallobject; private Object1 object1; private Object2 object2; // Getter & Setter public Overallobject getOverallobject() { return overallobject; } public void setOverallobject(Overallobject overallobject) { this.overallobject = overallobject; } public Object1 getObject1() { return object1; } public void setObject1(Object1 object1) { this.object1 = object1; } public Object2 getObject2() { return object2; } public void setObject2(Object2 object2) { this.object2 = object2; } // 静态内部类定义 public static class Overallobject {} public static class Object1 {} public static class Object2{ private String field1; // 初始化列表实例 private List<ListObject> listObject = new ArrayList<>(); // 实例初始化块:实例化Object2时自动执行,添加默认空元素 { listObject.add(new ListObject()); } // 也可以将上述逻辑放在无参构造方法中,效果完全一致 // public Object2() { // listObject.add(new ListObject()); // } // Getter & Setter public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public List<ListObject> getListObject() { return listObject; } public void setListObject(List<ListObject> listObject) { this.listObject = listObject; } } public static class ListObject{ private String field2; private String field3; // Getter & Setter public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } public String getField3() { return field3; } public void setField3(String field3) { this.field3 = field3; } } }
使用示例
修改后Service层不需要再手动处理列表初始化和元素添加,代码可简化为:
public class Service { public void handleJson() { OverallObject overallObject = new OverallObject(); // 直接实例化Object2即可,内部已自动完成列表初始化与默认元素添加 overallObject.setObject2(new OverallObject.Object2()); // 直接操作列表内元素即可 overallObject.getObject2().getListObject().get(0).setField2("自定义值"); overallObject.getObject2().getListObject().get(0).setField3("自定义值"); } }
该方案实现后,序列化输出的listObject会默认携带一个元素,不会返回空数组[]。
内容的提问来源于stack exchange,提问作者mclovin56
相关产品推荐
相关产品推荐

