2014-01-23 2 views
2

내가이 객체의 목록을 변경지고 있습니다 : configuredTaskData.get(i).setSettings(fc);가 아니라 설정처럼 모든 객체는 속성이

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가 마지막으로 설정되어 있지만

,

소리 i하지만 evry one

여기서 어떤 일이 벌어 질 수 있습니까? 자바 1.6

+1

'TaskDataValue' 클래스를 게시하십시오. 나는 설정 필드가'정적 '이라는 것을 내기한다. – Reimeus

+0

nop m8 :) 여기에 비트가있다.'public class TaskDataValue {' '...' 'private FieldConfiguration 설정; –

+2

그리고 어디에서'TaskDataValue's 'sourceofdata'에서? 그것들 모두가 같은'FieldConfiguration' 인스턴스로 구성되었을 가능성이 있습니까? –

답변

1

TaskDataValues을 어디서 작성했는지 확인하십시오 (sourceofdata). 이들 모두가 동일한 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

블록'TaskDataValue v = new TaskDataValue(); tdvs.add (v);'는 루프 안에 있으며 다른 객체를 만들지 않습니까? –

+0

수정. v를 추가 할 때마다 v가 새로운 v 인 경우 다른 오브젝트를 작성합니다. –