You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java序列化对象如何生成含三个attribute项的JSON数组?

问题根源

你之所以只得到最后一个EndDate的attribute项,核心原因是复用了同一个Column对象实例。Java里对象是引用类型,你每次修改attribute属性,只是改变了这个实例的属性值,而列表里始终只存了这一个实例的引用。最后序列化时,自然只会输出这个实例最后一次被设置的attribute值。

解决方案

必须为每个要生成的attribute项创建独立的Column对象,不能复用同一个实例。

错误写法(你之前的逻辑)

Column column = new Column();
List<Column> columns = new ArrayList<>();

column.setAttribute("FTOS");
column.setAttribute("StartDate");
column.setAttribute("EndDate");
columns.add(column); // 只加了一次,最终只有EndDate生效

正确写法

基础写法

List<Column> columns = new ArrayList<>();

// 为每个attribute新建Column实例
Column ftosCol = new Column();
ftosCol.setAttribute("FTOS");
columns.add(ftosCol);

Column startDateCol = new Column();
startDateCol.setAttribute("StartDate");
columns.add(startDateCol);

Column endDateCol = new Column();
endDateCol.setAttribute("EndDate");
columns.add(endDateCol);

简化写法(用流或循环)

如果要处理的attribute数量多,可以用循环或者Stream API减少重复代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

// 先定义所有需要的attribute
List<String> attrList = Arrays.asList("FTOS", "StartDate", "EndDate");

// 逐个生成Column实例并收集到列表
List<Column> columns = attrList.stream()
    .map(attr -> {
        Column col = new Column();
        col.setAttribute(attr);
        // 如果有其他共同属性,比如设置默认宽度
        // col.setWidth(120);
        return col;
    })
    .collect(Collectors.toList());

进阶:用工厂方法封装

如果Column还有其他固定默认属性,可以给Column类加个工厂方法,简化对象创建:

public class Column {
    private String attribute;
    private int width; // 示例其他属性

    // getter、setter、构造器省略

    // 工厂方法,快速创建带指定attribute的Column实例
    public static Column of(String attribute) {
        Column col = new Column();
        col.setAttribute(attribute);
        col.setWidth(120); // 设置默认宽度
        return col;
    }
}

使用时就更简洁:

List<Column> columns = Arrays.asList(
    Column.of("FTOS"),
    Column.of("StartDate"),
    Column.of("EndDate")
);

内容的提问来源于stack exchange,提问作者Pratik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:31:07