В чем разница между этими двумя Enum в Java - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть объект String: String theLanguage = "de";

У меня есть два перечисления: -

Перечисление 1:

public enum Lang
{
   French("fr"),
   German("de"),
   English("en"), 
   Italian("it"),
   Spanish("sp");

   private String lang;

   Lang(String lang) {
      this.lang = lang;
   }

   public String lang() {
      return lang;
   }
}

и Перечисление 2:

public enum Lang
{
   French(1, "fr"),
   German(2, "de"),
   English(3, "en"), 
   Italian(4, "it"),
   Spanish(5, "sp");


   final int languageID;

   private final String code;

   Lang( int languageID, String code)
   {
      this.languageID = languageID;
      this.code= code;
   }
}

------------------------ Мой вопрос --- --------------------------

Q 1 - Что такое Разница между этими двумя перечислениями (в основном во втором перечислении, почему существуют значения типа int)?

Q 2 - Что мне нужно сделать ИЛИ Добавить в 2-е перечисление в порядке для поиска / сопоставления объекта theLanguage с Enum2.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

1 - Второй можно искать как по строке, так и по значению int (если, например, вы знаете идентификатор языка, но не его код). Определите, что «WhoisRIR» делает в том месте, где должен находиться ваш конструктор.

2 - вам нужно добавить геттер для строки кода, а затем указывать в начале перечисление, пока не найдете элемент с кодом, идентичным theLanguage.

0 голосов
/ 18 февраля 2020

у 2nd просто есть дополнительный параметр, languageID

Добавьте этот код в 2nd Enum для поиска по коду (например, "de")

private static Map<String, Lang> reverseLookup = Arrays.stream(values())
             .collect(Collectors.toMap(Lang::getCode, Function.identity()));

public String getCode() {
    return code;
}

public static Lang fromCode(final String code) {
    return reverseLookup.get(code);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...