有Person类一个:
public class Person{
//... other field
private PersonStatus status;
//...getter,setter
}
其中的status字段是一个枚举类:
public enum PersonStatus{
A,B,C,D
}
有时候,显示PersonStatus时,不想使用其默认的name()方法,比如说中文。硬编码当然是可以实现的,不过不是好解决方案,所以鼓捣了一个国际化的小工具,很简单的,所以直接上代码,不解释。
public class EnumLocaleUtils {
private static ResourceBundle getResourceBundle(Class<?> clazz, Locale locale) {
return PropertyResourceBundle.getBundle(clazz.getName(), getLocale(locale));
}
private static Locale getLocale(Locale locale) {
return locale == null?Locale.getDefault():locale;
}
//根据国际化名称取enum
public static <T extends Enum<T>> T getByLocaleName(Class<T> clazz, String name, Locale locale) {
ResourceBundle bundle = getResourceBundle(clazz, locale);
if(bundle == null)
return null;
for(String key:bundle.keySet()) {
if(bundle.getString(key).equals(name)) {
return Enum.valueOf(clazz, key);
}
}
return null;
}
//取得enum的国际化名称
public static <T extends Enum<T>> String toLocalString(T e,Locale locale) {
ResourceBundle bundle = getResourceBundle(e.getClass(), locale);
if(bundle == null)
return e.name();
if(bundle.containsKey(e.name())) {
return bundle.getString(e.name());
}
return "";
}
}
测试下:
先写测试类,用不上junit,就写个main函数吧。
public class Test{
public static main(String[] args){
System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "优", new Locale("zh","CN")));//输出A
System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "良", new Locale("zh","CN")));//输出B
System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "中", new Locale("zh","CN")));//输出C
System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "差", new Locale("zh","CN")));//输出D
System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "未知", new Locale("zh","CN")));//输出null
System.out.println(EnumLocaleUtils.toLocalString(X.A,null));//输出优
System.out.println(EnumLocaleUtils.toLocalString(X.A,new Locale("en","EN")));//也是输出优,找不到_en_EN,那么默认用唯一的一个_zh_CN代替
}
}
enum X{
A,B,C,D
}
在同一个包下,建立一个X_zh_CN.properties
A=优
B=良
C=中
D=差
nativeToAscii。
运行之,输出如下:
A
B
C
D
null
优
优
符合预期。
这个小工具是可用的了,有用的上的只管拿去,成功能被分享,是一件快乐的事情。