Методы values () и valueOf()

Перечисления автоматически включают два предопределенных метода: values () и valueOf ().

Их общая форма выглядит так:

public static тип_епит[] values () public static тип_епит valueOf(String строка)

Метод values () возвращает массив, содержащий список констант перечисления. Метод valueOf () возвращает константу перечисления, чье значение соответствует строке, переданной в аргументе строка. В обоих случаях тип_епит— это тип перечисления. Например, в случае с перечислением Apple, показанным выше, типом возврата Apple.valueOf("Winesapp") будет Winesapp.

В следующей программе демонстрируется применение методов values () и valueOf ().

// Использование встроенных методов перечислений.
// Перечисление сортов яблок.
enum Apple {
Jonathan, GoldenDel, RedDel, Winesap, Cortland
}
class EnumDemo2 {
public static void main(String args[]) {
Apple ap;
System.out.println("Константы Apple: ") ; // применение
values() Apple allapples[] = Apple .values () ;
for(Apple a : allapples)
System.out.println(a);
System.out.println(); // применение
valueOf () ap = Apple.valueOf("Winesap");
System.out.println("ар содержит " + ap) ;
}
}

Вывод этой программы:

Константы Apple:
Jonathan
GoldenDel
RedDel
Winesap
Cortland
ар содержит Winesap

Обратите внимание, что программа использует стиль "for-each" цикла for для прохода по массиву констант, возвращенных values (). В целях демонстрации создается переменная allapples и ей присваивается ссылка на массив перечислимых значений. Однако этот шаг не является необходимым, поскольку for можно написать, как показано ниже, избежав необходимости в переменной allapples:

for(Apple а : Apple.values () )
System.out.println(a);

Также обратите внимание, как значение, соответствующее имени Winesapp получается вызовом метода valueOf ():

ар = Apple.valueOf("Winesap");

Как объяснялось ранее, valueOf () возвращает перечислимое значение, ассоциированное с именем константы, переданным в строке.

На заметку! Программисты на C/C++ обратят внимание на то, что в Java значительно упрощено преобразование между читабельной для человека формой константы перечисления и его бинарным значением по сравнению с другими языками. Это существенное преимущество подхода к перечислениям языка Java.