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"