在Java中声明静态字典

时间:2015-02-27 16:08:44

标签: java collections

有没有办法将hashMap或hashTable声明为静态但不是final? 我希望能够更新它,因此我不希望它是最终的......

如果没有,我可以用其他方式创建静态字典?

1 个答案:

答案 0 :(得分:2)

你可以做到这一点但很可能你不需要让它不是最终的。

当您进行引用最终时,它只是该引用,而不是您引用的无法更改的对象。

e.g。

static final Map<String, String> map = ...

map.put("Hello", "world"); // is okay
map = new HashMap<>();     // not okay
顺便说一句,拥有全局/静态集合通常不是一种好习惯。您应尽可能限制对此类集合的访问,并确保它是线程安全的,除非您知道这不是必需的。例如而不是公开收藏,你可以做

private static final Map<String, String> map = ...

public static synchronized void put(String key, String value) {
    map.put(key, value);
}  

public static synchronized String get(String key) {
    return map.get(key);
}