Переопределение valueOf() и toString() в Java enum
Быстрый ответ
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()
— законченный и неподдающийся изменениям, его стабильность заслуживает признания.
Настройка строк перечислений с пробелами
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 + " не найдено");
}
}
Управляйте пробелами и уникальными значениями перечислений как настоящий профессионал, при этом используя элегантный цикл. Ваш код должен быть неприступен для исключений, ведь в искусстве возможно множество трактовок, но в вашем коде этого быть не должно!
Увеличение производительности поиска путем отображения строк в перечисления
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);
}
}
Отставьте медленные и неэффективные итерации позади, преобразовывая строки в значения перечислений быстрее молнии — так быстро, что можно было бы устроить состязание на лучший вкус в городе.
Получение пользовательского значения, использование обработки ошибок и владение интерфейсом
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!
Полезные материалы
- Перечислительные типы (The Java™ Tutorials) – Официальное руководство по перечислениям Java от Oracle.
- enum в Java – GeeksforGeeks — Глубокое понимание перечислений в Java.
- Курс Java Core | DigitalOcean — Полное руководство по перечислениям Java от DigitalOcean.
- Перечисления – Документация Oracle Java — Учебник по использованию перечислений в операторе switch-case.
- Эффективное использование Java, 3-е издание (Книга) — Повышайте свои навыки работы с перечислениями с помощью рекомендаций из книги «Effective Java».