初始化后制作地图内容最终,但不是地图本身

时间:2017-03-09 14:30:45

标签: java hashmap constants mutable

我需要确保地图内容是最终的,它一旦初始化为:

split(sep=None, maxsplit=-1)

每次调用修改地图内容的方法(如put,remove,replace ...)都会以错误结束。

但我仍然能够表演另一个:

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

有没有办法实现这个目标?

由于

编辑:尝试使用Collections.unmodifiableMap方法,但是存在一个问题:

我想要包装的课程是:

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

以下代码返回错误:

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

类型不匹配:无法转换为Map&gt;到IndexedHashMap

对此有何想法?

3 个答案:

答案 0 :(得分:4)

final会使您的参考最终,但地图对象仍然可以编辑。您需要使用Collections

中的现有unmodifiableMap包装器
Map<K, V> map = Collections.unmodifiableMap(new HashMap<K, V>(iAnotherMap));

或构建自己的实现

答案 1 :(得分:1)

您可以使用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

}

答案 2 :(得分:0)

如果您可以使用番石榴,那么您需要的是:

com.google.common.collect.ImmutableMap

否则,您需要自己实现HashMap以使其成为不可变的。