Enum Propertyパターン

メッセージ管理などでプロパティファイルを使っていて、Javaのコード上でプロパティファイルのkeyをタイプミスしてしまったりkeyがどこで使われているか検索するのが面倒くさかったりしませんか?そんなときはEnum Propertyパターンが使えます。
プロパティファイルの場合、多言語表示のためにmessage.propertiesやmessage_ja.propertiesなどとロケールごとにファイルを作成するのが一般的だと思いますが、「Enum Propertyパターン」では、ファイルではなくEnumを作成します。たとえばこのような感じです。

public enum Message implements MessageResource {

    M001("Hello World"),
    M002("Hello {0}");
    ...
}
public enum Message_ja implements MessageResource {

    M001("こんにちは 世界"),
    M002("こんちには {0}}");
    ...
}

M001やM002がkeyで、コンストラクタで渡している文字列がvalueというわけです。(Eclipseの場合フォーマッタを調整するときれいに並びます。)

使い方は簡単で、Enumにアクセスしてメッセージを取得します。

public class Main {

    public static void main(String[] args) {
        Locale.setDefault(Locale.JAPANESE);
        printMessages();

        Locale.setDefault(Locale.ENGLISH);
        printMessages();
    }

    private static void printMessages() {
        System.out.println(Message.M001.getMessage());
        System.out.println(Message.M002.getMessage("Hoge"));
    }
}

出力はこうなります。メッセージはロケールに応じてちゃんと切り替わります。

[M001] こんにちは 世界
[M002] こんちには Hoge
[M001] Hello World
[M002] Hello Hoge


これでタイプミスは怖くないし検索も楽ですね。タイプミスしたらEclipseが教えてくれますし、検索にはCall Hierarchyが使えます。リファクタリング機能でkey(メッセージコード)を変更するのも簡単です。

サンプルおいておきます。クラスがいくつかありますが、中身はどれも小さなコードです。
https://www.seasar.org/svn/doma/trunk/enumpoperty-example/