tgoop.com/Java_Iibrary/1514
Last Update:
Java Enums — Всё, что нужно знать
1. enum Status { PENDING, APPROVED, REJECTED }
→ Базовый Enum
• Это называется enum (сокращение от enumeration).
• Используется для задания фиксированного набора констант (например, состояния заказа, роли пользователя).
2. Status.valueOf("APPROVED")
→ Преобразование строки в Enum
• Бросает исключение, если строка некорректна.
• Используется при маппинге из БД, пользовательского ввода или JSON (например, парсинг статуса из запроса).
3. Status.APPROVED.name()
→ Получить имя как строку
• Возвращает имя enum-константы в точности как оно определено.
• Используется при логировании, сериализации и т. д. (например, отображение enum как строки в ответе).
4. Status.APPROVED.ordinal()
→ Получить индекс Enum
• Возвращает позицию (начиная с 0).
• Используется только если порядок важен (обычно избегается ради стабильности) — например, для ранжирования уровней.
5. for (Status s : Status.values())
→ Перебор значений Enum
• Используется для итерации по всем константам.
• Удобно для UI-дропдаунов, фильтров, пакетной обработки.
6. enum Day { MON, TUE; boolean isWeekend() { return false; } }
→ Enum с методами
• Добавляет поведение к enum.
• Используется, если для каждой константы нужна логика (например, isHoliday() для Day).
7. enum Type { BASIC("B"), PREMIUM("P"); private String code; ... }
→ Enum с полями
• Используется для хранения дополнительных данных с каждой константой (например, код из БД, описание).
8. Enum с абстрактным методом
enum Mode {
ON { void act() { /* что-то делаем */ } },
OFF { void act() { /* ничего не делаем */ } };
abstract void act();
}
• Называется поведенческим enum'ом.
• Используется для логики, подобной конечному автомату (например, стратегии на константу).
9.
EnumSet.of(Status.APPROVED)
→ EnumSet• Высокопроизводительное множество для enum.
• Используйте вместо HashSet<Enum> (например, для фильтрации флагов или ролей).
10.
EnumMap<Status, String>
→ EnumMap• Эффективная key-value структура, использующая enum в качестве ключа.
• Быстрее и легче, чем HashMap<Enum, X> (например, для меток или конфигураций по статусу).
11.
switch(status)
→ Enum в операторе switch• Работает с enum'ами нативно.
• Используется для route-логики (например, обработки каждого статуса по-своему).