リストリテラルなら…
新しいJava7にimmutableなリストを記述できるリテラルが導入されるけど、Java5ならこういうヘルパメソッドを用意すればいいだけの話なのだ。(誰でも思いつくけど)
public static <T> List<T> constList(final T... elems){ return Collections.unmodifiableList(Arrays.asList(elems)); } private static final List<String> items = constList("item1", "item2", "item3", "item4");
同じようにしてSetもヘルパメソッドですぐに書けるように出来る。(Setの実装を選ぶジレンマが待ってるが)
しかしMapは単純にそれが出来ない。
まあ、それはともかくJava5環境なら上のヘルパメソッドみたいなの積極的に使ったほうがいいかもね。String[]を生で扱うよりはマシかも。
Mapなら…
public class MapUtils { public static final class Pair<K, V> { private final K k; private final V v; private Pair(K k, V v) { this.k = k; this.v = v; } } public static <K, V> Pair<K, V> pr(K k, V v) { return new Pair<K, V>(k, v); } public static <K, V> Map<K, V> constMap( Pair<? extends K, ? extends V>... pairs) { Map<K, V> map = new HashMap<K, V>(pairs.length); for (Pair<? extends K, ? extends V> p : pairs) map.put(p.k, p.v); return Collections.unmodifiableMap(map); } } private static final Map<String, Integer> constMap = constMap(pr("apple", 4), pr("strawberry", 8), pr("orange", 12));