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

Загрузка...