Сделайте содержимое карты окончательным после инициализации, но не саму карту

Мне нужно убедиться, что содержимое карты является окончательным, оно однажды инициализируется с помощью:

Map<K, V> map = new HashMap<K, V>(iAnotherMap);

Каждый вызов методов, которые изменяют содержимое карты (как положить, удалить, заменить...), приведет к ошибкам.

Но я все равно смог бы выполнить другое:

map = new HashMap<K, V>(iAnotherMap);

Есть ли способ добиться этого?

Спасибо

РЕДАКТИРОВАТЬ: Попытка подхода Collections.unmodifiableMap, но есть проблема:

Класс, который я хочу обернуть:

public class IndexedHashMap<K, T> implements Map<K, Pair< Integer, T >>, Serializable 

Следующий код возвращает ошибку:

IndexedHashMap< K, T > mCurrent = new IndexedHashMap< K, T >(); 
IndexedHashMap< K, T > mConstantCurrent = Collections.unmodifiableMap(mCurrent);' 

Несоответствие типов: невозможно преобразовать из Map> в IndexedHashMap

Есть идеи по этому поводу?

4 ответа

Решение

final сделает вашу ссылку окончательной, но объект карты все еще будет редактируемым. Вам необходимо использовать существующую оболочку unmodifiableMap из Collections

Map<K, V> map = Collections.unmodifiableMap(new HashMap<K, V>(iAnotherMap));

или построить свою собственную реализацию

Вы можете использовать UnmodifiableMap. Однако, если ваши потребности слишком специфичны, вы должны расширить существующий класс HashMap и делать все, что захотите.

public class HashMap<K, V> extends java.util.HashMap<K, V> {

   @Override
    public V put(K key, V value) {
        // report error
        return null;
    }

    // similarly override other methods as you want

}

Если вы можете использовать гуаву, то вы ищете:

com.google.common.collect.ImmutableMap

Иначе, вам нужно сделать собственную реализацию HashMap, чтобы сделать ее неизменной.

В Java есть библиотека под названием Collections, и вы можете найти там очень полезные статические методы, если вы хотите, чтобы ваша Collection не изменялась. Надеюсь, это поможет, ссылки: UnmodifiableMap UnmodifiableCollection

Другие вопросы по тегам