2014-01-23 128 views
2

我有对象的列表:改变从对象列表中的对象属性 - 每个对象获取属性改变

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

+1

发布你的'TaskDataValue'类。我敢打赌,设置字段是'静态' – Reimeus

+0

nop m8 :),这里是位:'公共类TaskDataValue {' '...' '私人FieldConfiguration设置;' –

+2

你在哪里创建'TaskDataValue's在'sourceofdata'中?是否有可能他们都配置了相同的FieldConfiguration实例? –

回答

1

检查您在sourceofdata中创建TaskDataValues的位置。他们是否有可能配置了相同的FieldConfiguration实例?

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也会更改。

+0

如果block'TaskDataValue v = new TaskDataValue(); tdvs.add(v);'是在一个循环内,不会创建不同的对象? –

+0

正确。如果每次添加一个v都是一个新v,那么它会创建不同的对象。 –