Лучшая практика использования Java Enum
Я видел два подхода к обработке перечислений со свойствами. Лучше другого?
В качестве свойства:
public enum SEARCH_ENGINE {
GOOGLE("http://www.google.com"),
BING("http://www.bing.com");
private final String url;
private SEARCH_ENGINE(String url) {
this.url = url;
}
public String getURL() {
return url;
}
}
Как метод:
public enum SEARCH_ENGINE {
GOOGLE {
public String getURL() {return "http://www.google.com";}
},
BING {
public String getURL() {return "http://www.bing.com";}
};
public abstract String getURL();
}
Ответы
Ответ 1
Первый явно выглядит более чистым для меня - он использует общность, что каждый элемент перечисления будет иметь фиксированный URL-адрес строки, который известен при инициализации. Вы фактически повторяете эту "логику" в каждой реализации во второй версии. Вы переопределяете метод для предоставления той же логики ( "просто верните строку, которая известна во время компиляции" ) в каждом случае. Я предпочитаю резервировать переопределение для изменений в поведении.
Я предлагаю сделать поле url
приватным, хотя в первом.
Ответ 2
Взгляните на пункт 21 из этой главы Джош Блох Эффективная Java. В нем говорится о типе безопасного перечислимого типа.
Ответ 3
Я бы пошел с первым, так как компилятор жалуется, если вы почему-то забыли добавить URL-адрес. Второй способ позволит вам делать ошибки здесь.