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のファイルがあった場合、全てのファイルを検証する
こんなとこかな〜?