2011-02-25 2 views
0

개인 필드 목록을 반환하는 getter 클래스가 있습니다.getter가 반환 한 컬렉션을 변경할 수없는 이유는 무엇입니까?

Class MyClass { 
    private List<String> myList; 

    public List<String> getMyList(){ 
    return myList; 
    } 
} 

그러나 getter 메서드 호출자는 해당 목록에서 요소를 추가하거나 제거 할 수 없습니다.

MyClass instance = new MyClass(); 
List<String> hisList = instance.getMyList(); 
hisList.add("new element"); 

UnsupportedOperationException이 발생했습니다.

getter가 해당 목록에 대한 참조를 반환하지만 그 목록이 호출자 측에서 읽기 전용 인 이유는 무엇입니까? 참고 getter에서 Collections.unmodifiableList()를 반환하지 않았습니다.

UPDATE :

미안 해요, 난 Arrays.asList에 의해 수정 크기의 목록을 만든 이유)

+3

모두가 올바르게 보입니다. 코드가 누락 되었습니까? 나는 어떤 목록도 초기화되지 않았다. – Sam

+2

귀하의 질문에 답변하는 데 필요한 코드가 없습니다. myList가 인스턴스화 된 방법을 표시하지 않았습니다. 우리가 제공 한 코드를 실행하면 NullPointerException이 발생합니다. – rfeak

+0

초기화 코드 및 스택 추적의 첫 번째 몇 줄. –

답변

4

아니, 당신은 호출되지 않은 getter에서 unmodifiableList()하지만, 목록 수 이미myList에 의해 참조 된대로 수정할 수 없습니다. myList :

+0

목록을 인스턴스화하는 방법도 매우 흥미 롭습니다. –

+2

또한'Arrays.asList' (변경 가능하지만 "구조적으로"변경 가능한'List'를 제공하지 않습니다). –

4

당신은 아마 같이 변경 불가능한 또는 상수 목록을 작성을 채 웁니다

당신이 짧은을 제공 할 수 있다면 도움이 될

하지만 완벽한 예 (예를 들어, 하나

myList = Arrays.asList("a", "b", ...); // returns a fixed-size list 

리스트를 만드는 코드를 보지 않고 추측 만하면 ...

+0

좋은 추측! 그게 내가 한 짓이야. – chance

관련 문제