ResourceBundle検証

id:bskuroneko:20050113
で書いたResouceBundleの検証をとりあえず作ってみた。
MessageEnum.java

import java.util.ResourceBundle;
import org.apache.commons.lang.enum.Enum;

public abstract class MessageEnum extends Enum {

    private final String _bundleName;
    
    protected MessageEnum(String bundleName, String key) {
        super(key);
        
        _bundleName = bundleName;
    }
    
    public final String getString() {
        ResourceBundle bundle = ResourceBundle.getBundle(_bundleName);
        return bundle.getString(getName());
    }
}

このクラスを継承してメッセージ用のEnumを作る。
AppMessages.java

public class AppMessages extends MessageEnum {
    
    public static final AppMessages FOO = new AppMessages("Foo");
    public static final AppMessages BAR = new AppMessages("Bar");
    
    private AppMessages(String key) {
        super("AppMessages", key);
    }
}

AppMessages.properties

Foo=FooMessage
Bar=BarMessage

使い方は、

String message = AppMessages.FOO.getString();

検証はとりあえずJUnitでやった。
AppMessageTest.java

import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
import messageutil.MessageEnum;
import org.apache.commons.lang.enum.EnumUtils;

public class AppMessagesTest extends TestCase {
    
    public void test() throws Exception {
        List enums = EnumUtils.getEnumList(AppMessages.class);
        for (Iterator ite = enums.iterator(); ite.hasNext(); ) {
            MessageEnum enum = (MessageEnum) ite.next();
            enum.getString();
        }
    }
}

以上でそれなりに使えると思う。
今回はCommonsLangのEnumを使ったけど、JDK5.0のenumでも同じことはできると思う。
あとは要件に応じて拡張すればよいかな。
考え付くのをいくつか書いておく。

  • ResourceBundleだけでなく、ほかの設定ファイルにも対応する
  • getStringだけでなく、getObjectとか作る
  • MessageEnumを継承しているEnumを探して全部検証する
  • 複数Localeのファイルがあった場合、全てのファイルを検証する

こんなとこかな〜?