Enum.values()
Методы каждого enum: values() — все константы, valueOf() — константа по имени, ordinal() и name() — номер и имя.
Доступно с: Java 5
Синтаксис
public static E[] values()Возвращаемое значение
E[]Новый массив со всеми константами в порядке объявления.
Примеры
Перебор констант с номером и именем:
enum Size { SMALL, MEDIUM, LARGE }
void main() {
for (Size s : Size.values()) {
IO.println(s.ordinal() + " " + s.name());
}
IO.println(Size.values().length);
}Результат:
0 SMALL
1 MEDIUM
2 LARGE
3valueOf() превращает строку в константу; имя должно совпадать точно, включая регистр:
enum Size { SMALL, MEDIUM, LARGE }
void main() {
Size s = Size.valueOf("MEDIUM");
IO.println(s == Size.MEDIUM);
IO.println(Size.valueOf("large".toUpperCase()));
}Результат:
true
LARGEНеизвестное имя вызывает исключение:
enum Size { SMALL, MEDIUM, LARGE }
void main() {
Size.valueOf("HUGE");
}Результат:
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant Main.Size.HUGEПримечания
values() и valueOf() компилятор добавляет в каждый enum сам. values() каждый раз создаёт новый массив — в горячем цикле сохраните его в переменную. ordinal() зависит от порядка объявления, поэтому не храните его в базе данных: после добавления константы в середину все номера сдвинутся. name() всегда возвращает имя из кода, а toString() можно переопределить.
См. также
- enum — Объявляет перечисление — тип с фиксированным набором значений.
- EnumMap — Словарь, ключи которого — значения одного enum. Быстрый и хранит ключи в порядке объявления.
- EnumSet — Множество значений одного enum. Работает как набор битовых флагов, но с понятным кодом.
- IllegalArgumentException — Сообщает, что метод получил недопустимый аргумент.
Вопросы и ответы по теме
В учебнике
- Перечисления (enum) — Перечисления enum в Java: фиксированный набор значений, values() и valueOf(), switch по перечислению, поля и методы.