myfinderの技術や周辺的活動のblog

2008年12月8日月曜日

finalなMap

アプリケーションの情報を書いたりするのに、public static finalなMapを作ったりする。

public static final Map<String, String> mapObj = new HashMap<String, String>();
static {
mapObj.put("foo", "bar");
mapObj.put("hoge", "fuga");
}

こんな感じで書くこともあるかもしれないが、実はこれだとmapObjがfinalにならない。
(putとかでデータを追記したり、改変したりできる)

これでは意図しないデータの改変などが起こりうるので、変更を許さないようにするには下記のように書かないといけない。


private static final Map<String, String> mapObj;
static {
Map<String, String> tmpMap = new HashMap<String, String>();
tmpMap.put("foo", "var");
tmpMap.put("hoge", "fuga");
mapObj = Collections.unmodifiableMap(tmpMap);
}


Collections.unmodifiableMapに、改変を許可しないMapオブジェクトを渡すと、改変できないMapオブジェクトが得られる。
(正確には、改変しようとすると例外をスローするオブジェクトが得られる)

こうやって書いておくことで、処理の途中でMapが改変されるのを防止できる。

0 件のコメント: