Java中JAXB解组后基于对象属性向列表添加新对象的问题
解决方案
根因
你已经成功创建了新的Student实例,但没有将该实例添加到Registry对象持有的Student列表中,因此改动不会同步到对象结构里。
代码修改
在你标记为(1)的位置下方,新增一行代码将新学生对象添加到当前Registry的学生列表即可:
for (Registry e: entries) { // 先判断学生列表是否为空,避免空指针异常(可选但推荐) if (e.getStudent() == null) { e.setStudent(new ArrayList<>()); } for (Student s : e.getStudent()) { if (s.getSchool().equals("Berlin")) { Student obj = new Student(); obj.setFirstName("MP"); obj.setGender("F"); obj.setSchool("Berlin"); // 新增这行代码,把新学生加入列表 e.getStudent().add(obj); } } }
可选优化
如果要避免每次都做非空判断,可以直接在Registry类的Student列表属性上直接初始化:
// Registry类中修改属性定义 private List<Student> student = new ArrayList<>();
这个改动也能兼容JAXB解组逻辑,解组时会自动覆盖初始化的空列表。
修改完成后重新运行代码,就能得到你预期的输出结构。
内容的提问来源于stack exchange,提问作者Rakshan Premsagar Kapikad
相关产品推荐
相关产品推荐

