Получение enum по имени в Java
Статический метод valueOf принимает имя константы
как String и возвращает соответствующий элемент
перечисления. Имя должно совпадать с идентификатором
константы в коде:
enum PostStatus { DRAFT, PUBLISHED, ARCHIVED }
Получим константу по строковому имени и выведем ее на экран:
PostStatus status = PostStatus.valueOf("PUBLISHED");
System.out.println(status);
Метод name() у константы возвращает то же имя,
что ожидает valueOf. Так удобно сохранять статус
в конфигурации и восстанавливать его при чтении:
PostStatus saved = PostStatus.ARCHIVED;
String raw = saved.name();
PostStatus restored = PostStatus.valueOf(raw);
System.out.println(restored == saved);
Если строка не совпадает ни с одной константой, вызов
valueOf завершится исключением
IllegalArgumentException. Перед разбором внешних
данных имя лучше проверить по списку из values():
public class Main {
static boolean isKnown(String name) {
for (PostStatus status : PostStatus.values()) {
if (status.name().equals(name)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(isKnown("DRAFT"));
System.out.println(isKnown("UNKNOWN"));
}
}
Объявите enum Role с константами
GUEST, USER и ADMIN.
Дана строка:
String raw = "ADMIN";
Получите константу Role по этой строке
и выведите её.
Объявите enum EmployeeType с константами
INTERN и STAFF.
Сохраните EmployeeType.STAFF в переменную,
получите name(), затем снова константу через
valueOf и выведите true, если ссылки
совпали.