2013-08-02 3 views
0

Это мой код:Включите Enum бросает 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 это типа ENUM

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

Конечно мой код будет сгенерирован Exeception, потому что если я называю getLocalLanguage и Locale.getDefault возвращается некоторые Enum Lang, которые не существуют (например, gb), будут поднимать exeception ..

Так как я могу это исправить?
Моя цель - вернуть только «это», «de», «fr», «en», «pr», «sp», и если localLanguage - это что-то еще, я хочу вернуть «это».
Не могли бы вы ребята, помогите мне добиться этого?

+1

Является ли это Java? Если это так, вы также должны добавить тег «java» к вашему вопросу. –

ответ

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"; 
} 
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"; 
} 
Смежные вопросы