是否可以将HashMap的某些特定键设为只读?

Shu*_*ham 3 java hashmap

我有5个密钥,不能删除/更新.我提供了自己的方法来添加,获取和删除此键HashMap.

UnmodifiableMap将所有键都设为只读,所以我也不能使用它.我可以维护List这些只读键,每当调用add/remove方法时,我都可以参考这个List并阻止操作.但还有其他更好的方法来实现这一目标吗?

提前致谢!

编辑:我知道我可以扩展HashMap和覆盖该put方法.这与我在上面的问题描述中所说的相似(维护一个List只读键并阻止对它们进行操作).我认为有可能是合并的一个方式UnmodifiableMap在一个HashMap使得从按键UnmodifiableMap将保持只读在新HashMap和其他键将支持他们的所有操作.

Men*_*ena 6

正如安德烈提到的,您可以继承HashMapMap实施其他实施.

这是一个匿名类快速示例,自包含在main方法中:

public static void main(String[] args) {
    Map<String, String> myMap = new HashMap<String, String>() {

        private static final long serialVersionUID = 6585814488311720276L;
        @Override
        public String put(String key, String value) {
            if (key != null && !key.equalsIgnoreCase("foo")) {
                return super.put(key, value);
            }
            else {
                throw new IllegalArgumentException("No foo's allowed!");
            }
        }
        // TODO!
        @Override
        public void putAll(Map<? extends String, ? extends String> m) {
            // TODO Auto-generated method stub
            super.putAll(m);
        }
    };
    System.out.println(myMap.put("blah", "blah"));
    System.out.println(myMap.put("foo", "blah"));
}
Run Code Online (Sandbox Code Playgroud)

产量

null
Exception in thread "main" java.lang.IllegalArgumentException: No foo's allowed!
    at test.Main$1.put(Main.java:18)
    at test.Main$1.put(Main.java:1)
    at test.Main.main(Main.java:29)
Run Code Online (Sandbox Code Playgroud)