2011年8月20日土曜日

Interfaceの定数でMapを使う

これは知らなかった。

InterfaceStringや、intの定数を持たせることができるのは知っていましたが、java.util.Map<K, V>も持たせられるのですね。
これは知りませんでした。

元ネタはここ。
How to Initialise a static Map in Java - stackoverflow


public interface AlarmDate {

    public static final String KEY_YEAR = "YEAR";

    public static final String KEY_MONTH = "MONTH";

    @SuppressWarnings("serial")
    public static final Map<String, Utility> KEY_ENUM =
        Collections.unmodifiableMap(new HashMap<String, Utility>(){{
            put(KEY_YEAR, Utility.ATTRIBUTE_YEAR);
            put(KEY_MONTH, Utility.ATTRIBUTE_MONTH);
    }});

    enum Utility {
        ATTRIBUTE_YEAR {
            @Override
            public String attribute() {
                return KEY_YEAR;
            }
        }, ATTRIBUTE_MONTH {
            @Override
            public String attribute() {
                return KEY_MONTH;
            }
        };

        abstract public String attribute();
    }
}


enumからStringは簡単にアクセスできたのですが、
Stringからenumにどうやってアクセスできるか悩んでいたんですよ。
switch文を書くのも嫌だし(というか、switch文を書かないために戦略的enumパターンを使っている)、どうしようか悩んでいたので、すっきりしました。


0 件のコメント:

コメントを投稿