2014-01-23 89 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,那麼它會創建不同的對象。 –