我有 5 个不能删除/更新的 key 。我提供了我自己的方法来添加、获取和删除此 HashMap
的键。
UnmodifiableMap
将使所有键成为只读的,所以我也不能使用它。我可以维护这些只读键的 List
,每当调用添加/删除方法时,我都可以引用此 List
并阻止操作。但是还有其他更好的方法来实现这一目标吗?
提前致谢!
编辑:我知道我可以扩展 HashMap
并覆盖 put
方法。这和我在上面的问题描述中所说的类似(维护只读键的 List
并防止对其进行操作)。我认为可能有一种方法可以将 UnmodifiableMap
合并到 HashMap
中,这样来自 UnmodifiableMap
的键将在新的 HashMap
和其他键将支持所有操作。
最佳答案
作为Andre提到,您可以继承自 HashMap
或其他 Map
实现。
这是一个匿名类的快速示例,自包含在 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"));
}
输出
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)
关于java - 是否可以将 HashMap 的某些特定键设置为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24574350/