Получение enum по строке в Java — метод valueOf с примерами

В Java у каждого enum есть статический метод valueOf(String), который возвращает константу перечисления по её имени. Метод чувствителен к регистру, поэтому строку часто приходится приводить к верхнему регистру.

Чтобы понять этот пример, нужно знать:

  • Строки в Java

  • Перечисления (enum) в Java

Пример: поиск enum по строковому значению

public class EnumString {

    public enum TextStyle {
        BOLD, ITALICS, UNDERLINE, STRIKETHROUGH
    }

    public static void main(String[] args) {

        String style = "Bold";

        TextStyle textStyle = TextStyle.valueOf(style.toUpperCase());

        System.out.println(textStyle);
    }
}

Вывод:

BOLD

В этой программе у нас есть перечисление TextStyle со стилями текста: BOLD, ITALICS, UNDERLINE, STRIKETHROUGH. Строка style содержит текущий стиль ("Bold"), но не в верхнем регистре.

Мы вызываем TextStyle.valueOf() и передаём ему style.toUpperCase(), чтобы получить соответствующую константу перечисления. Без toUpperCase() пришлось бы:

TextStyle.valueOf(style)

И программа выбросила бы исключение No enum constant EnumString.TextStyle.Bold.

Предупреждение

valueOf() бросает IllegalArgumentException, если константа с таким именем не найдена. Если входные данные ненадёжны, оборачивайте вызов в try...catch или предварительно проверяйте имя.