Предисловие
В нашем ежедневном программировании часто существуют такие «наборы данных», значения которых стабильны в программе, а элементы в «наборах данных» ограничены. Например, семь элементов данных с понедельника по воскресенье образуют неделю «набор данных», и четыре элемента данных с весны, лета, осень и зима - «набор данных» из четырех сезонов. Как лучше использовать эти «наборы данных» в Java? Поэтому перечисление пригодится
Перечисление на самом деле является типом, похожим на Int и char, что означает, что он ограничивает ввод при определении переменных. Вы можете назначить только значения, указанные в Enum.
Реализация Enum
JDK5 обеспечивает реализацию типов enum enum Java, что является более синтаксическим сахаром, чем новый тип.
Публичный сезон enum {весна, лето, осень, зима}Давайте посмотрим, как этот код реализуется через инструмент декомпиляции. Декомминированный код выглядит следующим образом:
Публичный финальный класс сезон расширяет enum {public static season [] values () {return (season []) $ values.clone (); } public Static Season ValueOf (String S) {return (сезон) enum.valueof (season, s); } частный сезон (String S, int i) {super (s, i); } общественный статический финальный сезон весна; Публичный статический финальный сезон лето; общественный статический финальный сезон осень; общественный статический финальный финальный сезон зима; Частный статический финальный сезон $ values []; static {Spring = новый сезон ("Spring", 0); Лето = новый сезон («Лето», 1); Осень = новый сезон ("Осень", 2); Зима = новый сезон («зима», 3); $ Values = (новый сезон [] {весна, лето, осень, зима}); }} Разключив код, вы можете найти:
1. Season - это обычный класс, который наследует от Enum и изменяется через final ключевое слово, чтобы избежать наследства.
2. SPRING , SUMMER , AUTUMN и WINTER в переводе являются статическими экземплярами Season и инициализированы в методе класса <clinit> .
3. Метод values() возвращает копию частной переменной $VALUES[] $VALUES[] , которая также инициализирована в методе <clinit> .
Как использовать enum
1. Синглтон режим
Мы уже знаем, что конструктор класса <clinit> может быть выполнен только одним потоком на этапе инициализации загрузки класса, поэтому каждый экземпляр перечисления имеет и только одну копию в куче Java. Эта функция позволяет подсчете реализовать синглтонский рисунок. Это именно то, насколько эффективно автор Java Josh Bloch выступает за использование внедрения синглтонских шаблонов.
public enum singleton {exants;} 2. Использовать в переключении
3. Пользовательские поля и методы
В дополнение к полям по умолчанию и методам перечисления вы можете настроить для бизнес -логики.
public enum Enumtest {plus (" +") {@Override public int bind (int arg1, int arg2) {return arg1 + arg2; }}, Sub (" -") {@Override public int bind (int arg1, int arg2) {return arg1 - arg2; }}; окончательная строка операция; EnumTest (string anpormation) {this.operation = Operation; } Abstract int bind (int arg1, int arg2);}4. Реализуйте интерфейс
Операция интерфейса {int aperice (int arg1, int arg2);} public enum enumtest реализует операцию {plus (" +") {@override public inportive (int arg1, int arg2) {return arg1 + arg2; }}, Sub (" -") {@Override public int operation (int arg1, int arg2) {return arg1 - arg2; }}; окончательная строка операция; EnumTest (string anpormation) {this.operation = Operation; }} В практических приложениях «+» и «-» могут использоваться в качестве ключей, плюс и субмоть в качестве value , а также предварительно провести их в хэшмапе в hashMap . Конкретный метод использования следующим образом:
Операция операции = hashmap.get ("+"); int result = Operation.Bind (1, 2);Суммировать
Выше всего о типах перечисления в Java. Я надеюсь, что благодаря введению этой статьи в Enums в Java это может быть полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте сообщение для общения.