apache common의 UnmodifiableMap은 Immutable과 비슷하지만 기존 맵을 변경하지 못하도록 하지만 실제 객체의 인스턴스를 래핑하는 객체정도로 보면 좋을 것 같다. 


다음은 예시이다. hashCode를 보면 동일한 객체인지 알 수 있다. 





import org.apache.commons.collections.map.UnmodifiableMap;


Map<String, Object> map1 = Maps.newHashMap();

map1.put("key", "value");


MapUtils.debugPrint(System.out, "map1", map1);

System.out.println(map1.hashCode());

System.out.println();


Map<String, Object> map2 = UnmodifiableMap.decorate(map1);

MapUtils.debugPrint(System.out, "map2", map2);

System.out.println(map2.hashCode());



결과


map1 = 

{

    key = value java.lang.String

} java.util.HashMap

112004910


map2 = 

{

    key = value java.lang.String

} org.apache.commons.collections.map.UnmodifiableMap

112004910





UnmodifiableMap 코드 내부에서는 아래와 같이 변경하려 하면 에러를 발생시킨다. 


    public void clear() {

        throw new UnsupportedOperationException();

    }


    public Object put(Object key, Object value) {

        throw new UnsupportedOperationException();

    }


    public void putAll(Map mapToCopy) {

        throw new UnsupportedOperationException();

    }


    public Object remove(Object key) {

        throw new UnsupportedOperationException();

    }


Posted by 김용환 '김용환'

댓글을 달아 주세요