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

序列化类新增字段赋值后在方法外部变为null的问题求助

序列化类新增字段赋值后在方法外部变为null的问题求助

大家好,我遇到一个百思不得其解的问题,想请各位帮忙排查下:

我在一个Jar库中定义了两个实现Serializable接口的类,代码大致如下:

public class CfgEntry implements Serializable {

    // Array of towers
    public ArrayList<TwrData> twrArrayList = new ArrayList<TwrData>();

    {
        FillTowerArray();
        PrintFields(twrArrayList.get(twrArrayList.size()-1)); // Print the last entry
    }

    private void FillTowerArray(){
        // Only placing one entry in the arraylist
        TwrData newTwr = new TwrData();
        newTwr.twrName = "twr1";
        newTwr.twrType = "r";
        newTwr.rtName "rt1"; // 原代码存在语法遗漏,推测实际应为 newTwr.rtName = "rt1";

        twrArrayList.add(newTwr);
        PrintFields(twrArrayList.get(twrArrayList.size()-1)); // Print instance just added
    }
}

public class TwrData implements Serializable {
    // Serialized declaration to get rid of warning
    private static final long serialVersionUID = 1L;

    public String twrName;
    public String twrType;
    public String rtName;

    public TwrData() {
        // Set default values
        twrName = "";
        twrType = "";
        rtName = "";
    }
}

这个Jar库被我的主GUI程序引用,之前一切运行正常,但最近我给TwrData类新增了rtName字段后就出问题了。我加了测试用的PrintFields方法来打印字段值,发现在FillTowerArray方法内部打印刚添加的TwrData实例时,所有字段(包括新增的rtName)都能正常显示赋值后的内容;但当方法退出后,在CfgEntry的初始化块中再次打印同一个实例,旧字段twrName、twrType的值都能保留,唯独新增的rtName变成了null。

我已经尝试过清理并重新构建Jar库和主GUI程序,甚至删除了所有编译生成的文件从头开始构建,但问题依然存在。我本来以为只要重新构建,新增的字段就能正常使用,现在字段是可以访问的,但赋值后无法保留,看起来像是作用域问题,但旧字段却能正常生效,实在搞不懂哪里出了问题,有没有大佬能指点一下可能的原因?

备注:内容来源于stack exchange,提问作者Bill p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:54:51