2013-02-28 6 views
-1

변경 불가능한 맵에 항목을 추가하려고 시도 중입니다. JVM catch UnsupportedOperationException 원본 맵의 서브 뷰에 항목을 추가 할 때 JVM이 원래보기에 직접 추가하는 것을 신경 쓰지 않습니다.수정 불가능한 맵은 반환하지 않고 항목을 계속 추가 할 수 있습니다. UnsupportedOperationException

ConcurrentMap<String, Integer> origView= new ConcurrentHashMap<String, Integer>(); 
       Map<String,Integer> subView = Collections.unmodifiableMap(origView); 
       origView.put("s", 44); // ok 
       subView.put("p", 77); // java.lang.UnsupportedOperationException 

Collections.unmodifiableSortedMap (의 그러나 문서)는 말한다 :

시도가 직접 여부는 수집 뷰를 통해 반환 된 소트 맵을 수정하거나 서브맵, 설치된 headMap, 비아 오 r tailMap보기, 결과 UnsupportedOperationException.

감사합니다.

+2

반환 된지도는 원래지도와 아무 관련이 없습니다. 물론 원래 맵에 물건을 추가 할 수 있습니다. –

답변

4

"는 반환 소트 맵을 수정하려고 시도합니다. ..."

그것은 단지 원래 Map을 포함하지 않는 unmodifiableMap(...) 호출에서 반환 된 MapUnsupportedOperationException 발생합니다. unmodifiableMap(...)에서 반환됩니다

Map은 원래 Map 같은 하지입니다.

+0

대단히 감사합니다. – Rehme

1

Collections.unmodifiableMap() 원본지도의 수정 불가능한보기를 반환합니다. 어떤 식 으로든 원래지도가 변경되지 않습니다. 이는 원래지도가 여전히 수정할 수 있음을 의미합니다. 수정할 수없는보기를 수정하려고하면 예외가 발생합니다.

+0

삭제 해 주셔서 감사합니다. – Rehme