Enum.name() и Enum.toString() в Java: различия и использование
Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55
Быстрый ответ
text
Скопировать код
**`Enum.name()`** всегда возвращает оригинальное имя константы перечисляемого типа. В то время как **`Enum.toString()`** по умолчанию также возвращает имя, но данный метод можно переопределить по своему усмотрению.
java enum Quirk { NEEDEDCOFFEE, CODECOMPILING }
// Чистое имя Quirk.NEEDEDCOFFEE.name(); // "NEEDEDCOFFEE"
// Хамелеон, следующий вашим правилам Quirk.CODECOMPILING.toString();// "CODECOMPILING", если вы не установили свои правила
[AsideBanner]
## Детали, на которые следует обратить внимание
**enum** в Java — это тип, предоставляющий **ограниченный набор констант**. Чтобы понять всю картину, давайте более подробно рассмотрим эти методы.
### Enum.name(): Ваш надежный друг
Метод `Enum.name()` — это финализированное поле. Он непогрешимо возвращает имя константы перечислений, заданное при объявлении. Этот метод является вашей постоянной опорой, которая всегда остается неизменной.
### Enum.toString(): Переменчивость по вашему усмотрению
Метод `Enum.toString()` отличается своей гибкостью. Если по умолчанию он возвращает имя константы, то при желании его можно переопределить на своё усмотрение.
## Взаимодействие и последствия
Эти методы — не просто набор функций внутри типа перечисления, они являются активными участниками реализации приложения. Давайте узнаем больше о их ролях и возможных сложностях.
### Enum.name() и логика приложений
Использование `Enum.toString()` в ключевой логике может привести к нежелательным ошибкам. Если вам нужно стабильное и надежное значение, полагайтесь на `Enum.name()`.
### Enum.toString() и пользовательский интерфейс
Вот здесь приходит на помощь `Enum.toString()`. Для улучшения восприятия пользовательского интерфейса или логов приложения можно переопределить `Enum.toString()`, чтобы он соответствовал контексту.
### Enum.name() как хранитель стабильности
`Enum.name()` играет ключевую роль при работе с постоянными данными. Он гарантирует сохранение консистентности значений перечислений в базе данных или файлах. В то время как переопределенный `Enum.toString()` может привести к нежелательным изменениям.
### Enum.toString() и настройка
Переопределите `Enum.toString()`, чтобы передать контекстуальное значение для перечисления. Это идеально подходит для задач локализации или динамического изменения интерфейса.
## Визуализация
Взглянем на аналогию между `Enum.name()` и `Enum.toString()`:
markdown Пример перечисления: DIRECTION { NORTH, EAST, SOUTH, WEST };
Паспорт (🛂) : Enum.name() Визитная карточка (💼): Enum.toString()
`Enum.name()`: Прецизность и надежность
markdown 🛂 NORTH // "NORTH", непоколебимо и идеально!!
`Enum.toString()`: Адаптивность
markdown 💼 "Я иду на север" // Возможность для вариаций в представлении.
markdown
Метод | Константность | Настраиваемость |
---|---|---|
.name() | 🛂 Всегда | ❌ |
.toString() | 💼 Возможно изменять | ✅ |
`Enum.name()` отвечает за стабильность, `Enum.toString()` привносит гибкость.
## Воссоздание перечислений
Метод `Enum.valueOf()` воссоздает перечисление из строки. С `Enum.name()` работа безопасна, а вот изменчивый `Enum.toString()` может вызвать проблемы.
### Идентичность с помощью Enum.name()
`WeekDay.valueOf(WeekDay.MONDAY.name())` идеально работает благодаря постоянству `name()`, несмотря на возможные вариации `toString()`.
### Enum.toString() и потенциальные риски
`WeekDay.valueOf(WeekDay.MONDAY.toString())` может выкинуть `IllegalArgumentException`, если `toString()` был переопределен.
## Рекомендации и предупреждения
Несколько советов помогут свести к минимуму риски и укрепить ваш код.
### Учет чувствительности к регистру
Метод `Enum.valueOf()` чувствителен к регистру, поэтому будьте осторожны: изменение регистра в `toString()` может вызвать ошибки выполнения.
### Осторожность при переопределении toString()
Переопределяя `toString()`, не забывайте документировать изменения. Это поможет коллегам избежать неожиданностей в последующей разработке.
## Полезные материалы
1. [Enum (Java Platform SE 8)](https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html) — официальная документация Java для `Enum.name()`.
2. [Object (Java Platform SE 8)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) — описание метода `toString()`, как наследуемого перечислениями из `Object`.
3. [Java enum – why use toString instead of name – Stack Overflow](https://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name) — обсуждение практического отличия между `Enum.name()` и `Enum.toString()`.
4. [enum в Java – GeeksforGeeks](https://www.geeksforgeeks.org/enum-in-java/) — подробное объяснение `Enum` в Java.
5. [DZone – Java Enums: How to Use Configurable Method](https://dzone.com/articles/java-enums-how-to-use-configurable-method) — глубокое погружение в работу с Enums.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод всегда возвращает оригинальное имя константы перечисляемого типа?
1 / 5
Свежие материалы
Основные функции для работы с файлами в C
30 августа 2024
Лучшие каналы для изучения Java
6 сентября 2024