Что такое Энум?
Тип enum, представленный в Java 5, представляет собой специальный тип данных, который позволяет переменной быть набором предопределенных констант. Он часто используется, когда мы знаем все возможные значения во время компиляции, а набор констант можно изменить, когда они нам понадобятся.
История перечисления
Пока не был представлен тип enum, разработчики Java использовали для определения констант дополнительные комментарии:
В этом коде понедельник должен быть зафиксирован на 1, вторник на 2 и среда на 3. Поскольку это правило установлено для комментария, будет проблемой разделить комментарий и код или удалить один из них, особенно комментарий. Мы можем улучшить его, если узнаем значение чисел по их именам.
Теперь у каждого числа есть собственное имя, которое мы можем легко вычислить, чтобы оператор switch стал более простым. Кроме того, переменные становятся постоянными по ключевому слову final
и присваиваются только один раз в памяти по ключевому слову static
. Обратите внимание, что мы можем улучшить исходный код при использовании интерфейса, так как эта форма кода ( private final static
) может быть опущена в нем:
Выглядит намного лучше, не так ли? Тем не менее, у него есть одна тривиальная проблема, из-за которой он не может гарантировать безопасность во время компиляции, когда вы пытаетесь сравнить два разных набора констант, таких как:
if (Day.Monday == Month.January) { System.out.println("Mondays are bad"); }
Если компилятор Java не находит такой исходный код и не помечает его как ошибку, у вас может возникнуть непредвиденная ошибка во время выполнения. Чтобы избавиться от риска, один умный разработчик Java может предложить способ изменить интерфейсы на классы и сделать тип данных каждой константы не int и не что-то еще, а свой класс, чтобы экземпляр их класса был назначен каждому из них. Если да, то наверняка компилятор обнаружит ошибку, поскольку Day.Monday
и Month.January
относятся к разным типам данных. Но в этом удивительном методе все еще остается одно ограничение: вы больше не можете использовать оператор switch
, потому что он не поддерживает настраиваемые типы данных. Бум! Вот причина, по которой тип enum был представлен в Java 5.
Вывод
Все имеет свою историю. Миллионы возмущений разработчиков Java и тонны сломанных клавиатур накапливались так долго, что Sun Microsystems решила создать тип enum. В следующем посте будет рассказано, из чего он состоит и как работает. Спасибо за чтение.
использованная литература
https://www.baeldung.com/a-guide-to-java-enums