序列化类新增字段赋值后在方法外部变为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
相关产品推荐
相关产品推荐

