1. Фон
До того, как был введен язык Java, общим шаблоном для указания типа перечисления является объявление набора констант Int. Код, который мы использовали для определения перед использованием публичного окончательного статического метода, заключается в следующем, используя 1 для представления Spring, 2 для представления лета, 3 для представления осени, и 4 для представления зимы.
Открытый сезон {открытый статический финал int spring = 1; Общественный статический финал int summer = 2; общественный статический финал int осень = 3; Public Static Final int Winter = 4;}Этот метод называется шаблоном перечисления int. Но что не так с этой моделью? Мы использовали его так долго, поэтому проблем не должно быть. Обычно код, который мы пишем, учитывает его безопасность, простоту использования и читаемость. Во -первых, давайте рассмотрим его безопасность типа. Конечно, этот шаблон не безопасен для типа. Например, мы разрабатываем функцию, которая требует определенного значения весной, летом, осенью и зимой. Однако с типом INT мы не можем гарантировать, что передаваемая стоимость является законной. Код выглядит так:
Private String getChinesSeseason (int season) {stringBuffer result = new StringBuffer (); Switch (Season) {case season.spring: result.append ("Spring"); перерыв; Case Season.summer: Result.append («Лето»); перерыв; Case Season.autumn: Result.append ("осень"); перерыв; Case Season.winter: Result.append («Зима»); перерыв; по умолчанию: result.append («Сезон нет на земле»); перерыв; } return result.toString (); } public void dosomething () {System.out.println (this.getChinesseseason (season.spring)); // Это нормальная сценария System.out.println (this.getchinessesesesesesesess (5); // Это аномальный сценарий, который приводит к неверным типам.Программа Getchinesseseason (Season.spring) - это метод, который мы ожидаем использовать. Но GetChinesseseason (5), очевидно, не так, и компиляция очень пассивна. Мы не знаем, что происходит во время выполнения. Это, очевидно, не соответствует безопасности типов программ Java.
Далее, давайте рассмотрим читаемость этого шаблона. Большинство случаев при использовании перечислений мне нужно быть удобным, чтобы получить строковые выражения типа перечисления. Если мы распечатаем константы перечисления Int, то мы видим набор чисел, что не очень полезно. Мы можем подумать об использовании строковых постоянных вместо констант Int. Хотя он обеспечивает печатные строки для этих константов, он вызывает проблемы с производительностью, поскольку он опирается на операции сравнения строк, поэтому этот шаблон также не ожидаем. Учитывая как безопасность типа, так и читаемость программы, выявлены недостатки шаблонов перечисления INT и строковых строк. К счастью, с момента выпуска Java 1.5 было предложено еще одно альтернативное решение, которое позволяет избежать недостатков моделей перечисления INT и строк и обеспечивает множество дополнительных преимуществ. Это тип перечисления. В следующих главах будут представлены определения, функции, сценарии приложений, а также преимущества и недостатки типов перечисления.
2. Определение <br /> enum тип относится к юридическому типу, состоящему из фиксированного набора констант. В Java ключевое слово enum используется для определения типа перечисления. Ниже приведено определение типа enum enum Java.
Public Enum Season {весна, лето, осень, Winer;} 3. Особенности
Заявления Java, которые определяют типы enum, очень просты. У него есть следующие характеристики:
1) Используйте ключевое слово enum 2) тип имени, например, сезон 3) строка допустимых значений, таких как весна, лето, осень, зима и сезоны, определенные выше 4) перечисления могут быть определены отдельно в файле или встроены в другие классы Java.
В дополнение к таким основным требованиям у пользователей есть некоторые другие варианты
5) Перечисления могут реализовать один или несколько интерфейсов (интерфейсы) 6) могут быть определены новые переменные 7) Можно определить новый метод.
4. Сценарии приложения
Принимая безопасность типа, упомянутое в фоновом режиме в качестве примера, переписывайте этот код с типом перечисления. Код заключается в следующем:
публичный сезон enum {весна (1), лето (2), осень (3), зима (4); частный код int; Частный сезон (int code) {this.code = code; } public int getCode () {return Code; }} public class использует сезон { / ** * преобразовать сезон английского в китайский сезон * @param season * @return * / public String getChinessesesese (сезон сезон) {stringBuffer result = new StringBuffer (); Switch (Season) {case Spring: result.append ("[китайский: весна, константа перечисления:" + season.name () + ", data:" + season.getcode () + "]"); перерыв; case осень: result.append ("[китайский: осень, константа перечисления:" + season.name () + ", data:" + season.getCode () + "]"); перерыв; Case Summer: Result.append («[Китайский: лето, константа перечисления:« + season.name () + », data:« + season.getcode () + "]"); перерыв; Case Winter: result.append ("[Китайский: зима, константы перечисления:" + season.name () + ", data:" + season.getcode () + "]"); перерыв; по умолчанию: result.append («сезон без земли» + season.name ()); перерыв; } return result.toString (); } public void doSomething () {for (Season S: season.values ()) {System.out.println (getChinesseseSeason (s)); // Это нормальный сценарий} //system.out.println(getchinessesesesease(5)); // Компилятор уже снят сбой здесь, что обеспечивает безопасность типа} public static void main (string [] arg) {использует сезон mase season = new aresseason (); Использование сезона.dosomething (); }}[Китайский: весна, константа перечисления: весна, данные: 1] [Китайский: лето, константа перечисления: лето, данные: 2] [Китайская: осень, константа перечисления: осень, данные: 3] [Китайский: зима, константа перечисления: зима, данные: 4]
Вот вопрос, почему я хочу добавить домен в тип перечисления? Цель состоит в том, чтобы связать данные с его постоянными. Например, 1 представляет весну, а 2 представляет лето.
5. Резюме
Итак, когда вы должны использовать перечисления? Всякий раз, когда необходим фиксированный набор констант, например, дни недели, сезоны года и т. Д. Или набор всех значений, которые он содержит, прежде чем мы компилируемся. Перечисление Java 1.5 может соответствовать требованиям большинства программистов, а ее краткие и простые в использовании характеристики очень заметны.
6. Использование
Использование 1: постоянное
public enum color {красный, зеленый, пустой, желтый}Использование 2: Переключатель
enum signal {green, желтый, красный} открытый класс трафик {сигнал цвет = сигнал. Red; public void change () {switch (color) {case red: color = signal.green; перерыв; Case Yellow: Color = Signal.Red; перерыв; Case Green: Color = Signal.yellow; перерыв; }}}Использование 3: добавьте новый метод в перечисление
Public Enum Color {Red ("Red", 1), зеленый ("зеленый", 2), пусто ("белый", 3), Йелло ("Желтый", 4); // Участничная переменная частная строка имени; частный индекс Int; // построить метод private color (string name, int index) {this.name = name; this.index = index; } // нормальный метод публичный статический строка getName (int index) {for (color c: color.values ()) {if (c.getindex () == index) {return c.name; }} return null; } // Получить метод SET public String getName () {return name; } public void setName (string name) {this.name = name; } public int getIndex () {return index; } public void setIndex (int index) {this.index = index; }}Использование 4: Методы перезаписать перечисление
Public Enum Color {Red ("Red", 1), зеленый ("зеленый", 2), пусто ("белый", 3), Йелло ("Желтый", 4); // Участничная переменная частная строка имени; частный индекс Int; // построить метод private color (string name, int index) {this.name = name; this.index = index; } // перезапись метод @Override public String toString () {return this.index+"_"+this.name; }}Использование 5: Реализуйте интерфейс
поведение публичного интерфейса {void print (); String getInfo (); } public enum color реализует поведение {red ("red", 1), зеленый ("зеленый", 2), пустой ("белый", 3), Йелло ("Желтый", 4); // Участничная переменная частная строка имени; частный индекс Int; // построить метод private color (string name, int index) {this.name = name; this.index = index; } // Метод интерфейса @Override public String getInfo () {return this.name; } // Метод интерфейса @Override public void print () {system.out.println (this.index+":"+this.name); }}Использование 6: Используйте интерфейс для организации перечисления
Общедоступный интерфейс еда {enum Coffee реализует еда {black_coffee, decaf_coffee, latte, cappuccino} enum десерт реализует еду {фрукты, пирог, gelato}}Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.