2010-07-26 9 views
7
final Set<Expression> exps = meng.getExps(); 
Iterator<Expression> iterator = exps.iterator(); 
final Expression displayedExp = exps.iterator().next(); 
exps.remove(displayedExp); 

이 코드는 다음과 같은 런타임 예외 추적 반환 :세트에서 항목을 삭제하는 방법?

null 
java.lang.UnsupportedOperationException 
     at java.util.Collections$UnmodifiableCollection.remove(Collections.java:1021) 

meng.getExps의 설정 구현() LinkedHashSet의입니다.

답변

7

죄송합니다. 설정이 Collections.unmodifiableCollection으로 바뀌 었습니다. 정확하게이 작업을 수행하면 컬렉션을 수정할 수 없게됩니다. 당신이 할 수있는 유일한 일은 다른 세트에 내용을 복사하고 이것으로 작업하는 것입니다.

+0

거기에 Collection.copy와 같은 유틸리티가 있습니까? – simpatico

+1

예. 세트 세트 = 새로운 HashSet (exps); – Landei

+0

@Landei는 기본 Java 동작이며, 명시 적으로 Collections.unmodifiableCollection으로 래핑해야합니까? 기본적으로이 변경 사항이 추가 된 java 버전은 무엇입니까? – Atri

4

getter가 명시 적으로 UnmodifiableCollection을 반환합니다. UnmodifiableCollection은 수정을 방지하는 종류의 래퍼입니다 (Set).

즉, API는 "내 컬렉션입니다.보고 만 만지지 마십시오!"라고 알려줍니다.

수정하려는 경우 새 세트로 복사해야합니다. 이 목적에 가장 적합한 복사 생성자는 HashSet입니다.

관련 문제