2013年5月15日水曜日

[Java]更新できないSetをメンバ変数で初期化する

何かの照合用にメンバー変数にSetを持っておきたいことって時々あると思います。
でも引数付のコンストラクタがないので、インスタンスイニシャライザやスタティックイニシャライザで処理することは多いと思います。でも定義と宣言が分かれてしまうので、ちょっとわかりづらくなるケースがあります。

というのを組みわせで解決してみました。がこんな感じ。

// 更新できないSetをメンバ変数として生成する
private final Set<String> set = Collections.unmodifiableSet(
        new HashSet<String>(
                Arrays.asList(
                        "aaa",
                        "bbb",
                        "ccc",
                        "ddd"
                )
            )
        );

ていうか、素直にユーティリティ系のメソッドを準備すべきですよね。
    private final Set<Integer> set2 = newUmSet(
            1,
            2,
            3,
            4
    );

    @SafeVarargs
    static <E> Set<E> newUmSet(T... args){
        Set<E> set = new HashSet<E>(Arrays.asList(args));
        return Collections.unmodifiableSet(set);
    }

0 件のコメント: