我有一个对象列表:
List<TaskDataValue> configuredTaskData = sourceofdata;
我正在迭代列表,从对象中的对象改变属性:
for (int i=0; i<configuredTaskData.size(); i++) {
FieldConfiguration fc = configuredTaskData.get(i).getSettings();
String fieldName = configuredTaskData.get(i).getName();
if (newLabels.containsKey(fieldName)) {
fc.setLabel(newLabels.get(fieldName));
configuredTaskData.get(i).setSettings(fc);
}
}
虽然发生的事情是每个TaskDataValue.getSettings.label都设置为最后一个,
听起来configuredTaskData.get(i).setSettings(fc);
不仅要设置为i
,还要设置一个
这里可以发生什么?
使用java 1.6
答案 0 :(得分:1)
这样的事情发生的最可能的原因是你实际上只有一个TaskDataValue
对象 - 或者在TaskDataValue
内有一个只有一个对象的对象。
因为该对象是共享的,所以从所有其他引用中也可以看到从一个引用所做的任何更改。
例如:
List<TaskDataValue> tdvs = ...;
TaskDataValue v = new TaskDataValue();
tdvs.add(v);
tdvs.add(v);
tdvs.add(v);
该代码创建一个TaskDataValue
个对象,并将该对象的三个引用添加到列表中。如果您更改tdvs.get(1)
内的设置,您也会看到2和3也会更改。
答案 1 :(得分:1)
检查TaskDataValues
中sourceofdata
的创建位置。它们是否可能都配置了相同的FieldConfiguration
实例?