启用Enum会抛出IllegalArgumentException

时间:2013-08-02 15:09:55

标签: java enums switch-statement illegalargumentexception

这是我的代码:

public static String getLocalLanguage() {
    switch(Lang.valueOf(Locale.getDefault().getCountry().toLowerCase())) {
        case it:
        case de:
        case fr:
        case en:
        case pr:
        case sp:
            return Locale.getDefault().getCountry().toLowerCase();
        default:
            return "it";
    }
}

Lang是一个枚举类型

public enum Lang {
    it,en,sp,fr,de,pr
}

当然我的代码会抛出一个Exeception,因为如果我调用getLocalLanguage并且Locale.getDefault返回一些不存在的Enum Lang(例如gb)会引发异常..

那我怎么解决这个问题呢? 我的目标是返回“it”,“de”,“fr”,“en”,“pr”,“sp”,如果localLanguage是其他东西,我想返回“它”..
你能帮助我实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

private static final Set<String> LANGUAGES = new HashSet<String>();
static {
    LANGUAGES.add("it");
    ... add the others ...
}

public static String getLocalLanguage() {
    String lang = Locale.getDefault().getCountry().toLowerCase();
    if (LANGUAGES.contains(lang)) {
        return lang;
    }
    return "it";
}

答案 1 :(得分:0)

try {
    Lang lang = Lang.valueOf(Locale.getDefault().getCountry().toLowerCase());
    return lang.toString();
} catch (IllegalArgumentException e) { // Thrown by Lang.valueOf when not found.
    Logger.getLogger(getClass().getName()).info("...");
    return "it";
}