Mapをロック

Beanのほうが安全だけど、Mapを使いたいな〜…というときのための一アイデア。
コンパイル時にはエラーをはじけないけど、動かせばすぐに分かると思う…たぶん。


import java.util.HashMap;

public class LockedMap extends HashMap {

private boolean lock = false;

public void lock() {
lock = true;
}

public void unlock() {
lock = false;
}

public Object get(Object key) {
if(lock && !this.containsKey(key)) {
throw new RuntimeException("キー[" + key + "]は存在しません。");
}

return super.get(key);
}

public Object put(Object key, Object value) {
if(lock) {
throw new RuntimeException("インスタンスはロックされています。");
}

return super.put(key, value);
}

public static void main(String[] args) {
LockedMap map = new LockedMap();

map.put("キー", "値");

System.out.println(map.get("キー"));
System.out.println(map.get("似非キー"));

map.lock();

System.out.println(map.get("キー"));
System.out.println(map.get("似非キー"));
}

}

実行結果は次の通り。


null

java.lang.RuntimeException: キー[似非キー]は存在しません。
at LockedMap.get(LockedMap.java:17)
at LockedMap.main(LockedMap.java:42)
Exception in thread "main"