从对象列表更改对象属性 - 每个对象都会更改属性

时间:2014-01-23 17:57:29

标签: java

我有一个对象列表:

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

2 个答案:

答案 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)

检查TaskDataValuessourceofdata的创建位置。它们是否可能都配置了相同的FieldConfiguration实例?