Переопределение valueOf() и toString() в Java enum

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Java
Скопировать код
public enum Color {
    RED, GREEN, BLUE;

    @Override
    public String toString() {
        // Избавимся от заглавных букв!
        return name().toLowerCase();
    }
    
    public static Color valueOfIgnoreCase(String name) {
        // Приветствуем единые стили!
        return Color.valueOf(name.toUpperCase());
    }
}

Переопределите метод toString(), чтобы установить метод представления перечислений. Создайте метод valueOfIgnoreCase для игнорирования регистра символов, ведь метод valueOf()законченный и неподдающийся изменениям, его стабильность заслуживает признания.

Кинга Идем в IT: пошаговый план для смены профессии

Настройка строк перечислений с пробелами

Java
Скопировать код
public enum PaintingStyle {
    IMPRESSIONISM("Импрессионизм"),  // Моне, это тебе посвящается!
    CUBISM("Кубизм"),                // Пикассо, вот твоя мощь!
    SURREALISM("Сюрреализм");        // Дали, дай время взлететь!

    private final String styleName;

    PaintingStyle(String styleName) {
        this.styleName = styleName;
    }

    @Override
    public String toString() {
        // Забудьте про названия с заглавных букв!
        return styleName;
    }

    public static PaintingStyle fromStringWithSpaces(String str) {
        // Идем по галерее в поисках стиля.
        for (PaintingStyle style : values()) {
            if (style.styleName.equalsIgnoreCase(str.trim())) {
                return style;
            }
        }
        // Приносим извинения, но такого стиля у нас нет.
        throw new IllegalArgumentException("Перечисление со значением " + str + " не найдено");
    }
}

Управляйте пробелами и уникальными значениями перечислений как настоящий профессионал, при этом используя элегантный цикл. Ваш код должен быть неприступен для исключений, ведь в искусстве возможно множество трактовок, но в вашем коде этого быть не должно!

Увеличение производительности поиска путем отображения строк в перечисления

Java
Скопировать код
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public enum Flavor {
    VANILLA("Ваниль"),          // Простота в оформлении, подобная керамической плитке.
    CHOCOLATE("Шоколад"),       // Аромат сладостных оптимизаций.
    STRAWBERRY("Клубника");     // Мелодия ягодного ассорти.

    private static final Map<String, Flavor> FLAVOR_MAP = 
        Stream.of(Flavor.values())
              .collect(Collectors.toMap(Object::toString, e -> e));

    private final String flavorName;

    Flavor(String flavorName) {
        this.flavorName = flavorName;
    }

    @Override
    public String toString() {
        return flavorName;
    }

    public static Flavor fromString(String flavorName) {
        // Быстрее, чем поиск в Google.
        return FLAVOR_MAP.getOrDefault(flavorName, null);
    }
}

Отставьте медленные и неэффективные итерации позади, преобразовывая строки в значения перечислений быстрее молнии — так быстро, что можно было бы устроить состязание на лучший вкус в городе.

Получение пользовательского значения, использование обработки ошибок и владение интерфейсом

Java
Скопировать код
public static <E extends Enum<E> & CustomValueEnum> E fromCustomValue(String customValue, Class<E> enumClass) {
    // Найти иглу в стоге сена теперь проще.
    return Arrays.stream(enumClass.getEnumConstants())
                 .filter(e -> e.getCustomValue().equals(customValue))
                 .findFirst()
                 .orElseThrow(() -> new IllegalArgumentException("Недопустимое значение: " + customValue));
}

public interface CustomValueEnum {
    // Мечта каждого перечисления – иметь уникальное значение!
    String getCustomValue();
}

Интерфейсы и Перечисления — великолепное сочетание. Пользовательские значения всегда под рукой, а креативная обработка ошибок — это художественное проявление программиста.

Визуализация

Представьте, что мы готовим торт! 🍰 Ваше Перечисление это список ингредиентов для секретного рецепта от бабушки.

  • ЯБЛОЧНЫЙ_ПИРОГ ассоциируется с "Восхитительным яблочным пирогом"
  • БАНАНОВЫЙ_ХЛЕБ – это "Сладкий банановый хлеб"
  • МОРКОВНЫЙ_ТОРТ – "Сочный морковный торт"

Переопределение valueOf: Особенно обрабатывайте ингредиенты. БАНАНОВЫЙ_ХЛЕБ – это "Особо спелые бананы"

Переопределение toString: Создайте свое уникальное название рецепта. МОРКОВНЫЙ_ТОРТ превращается в "Лучший морковный торт от бабушки"

Теперь ваша книга рецептов наполнена восхитительными, неповторимыми блюдами. Как насчет дегустации? 🍰

Играйте безопасно, избегайте рисков использования рефлексии

Использование рефлексии в Java подобно новой игрушке: влекет за собой, но опасно! Его применение может повлечь риски безопасности и станет чужеродным элементом вашего кода. Помните, надежный код — залог вашего успокоения!

Настройте свое перечисление с помощью продвинутых утилит

Настройте свое перечисление по вкусу:

  • Фильтры: Отбрасывают все лишнее.
  • Мапы (Maps): Позволяют всегда найти нужное.
  • Коллекторы: Собирают все нужное вместе.

Если кажется, что это слишком сложно, на помощь придет библиотека Google’s Guava!

Полезные материалы

  1. Перечислительные типы (The Java™ Tutorials) – Официальное руководство по перечислениям Java от Oracle.
  2. enum в Java – GeeksforGeeks — Глубокое понимание перечислений в Java.
  3. Курс Java Core | DigitalOcean — Полное руководство по перечислениям Java от DigitalOcean.
  4. Перечисления – Документация Oracle Java — Учебник по использованию перечислений в операторе switch-case.
  5. Эффективное использование Java, 3-е издание (Книга) — Повышайте свои навыки работы с перечислениями с помощью рекомендаций из книги «Effective Java».