Enum.name() и Enum.toString() в Java: различия и использование

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

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

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

text
Скопировать код
**`Enum.name()`** всегда возвращает оригинальное имя константы перечисляемого типа. В то время как **`Enum.toString()`** по умолчанию также возвращает имя, но данный метод можно переопределить по своему усмотрению.
java enum Quirk { NEEDED_COFFEE, CODE_COMPILING }

// Чистое имя Quirk.NEEDED_COFFEE.name(); // "NEEDED_COFFEE"

// Хамелеон, следующий вашим правилам Quirk.CODE_COMPILING.toString();// "CODE_COMPILING", если вы не установили свои правила


[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) — официальная документация Java для Enum.name().
  2. Object (Java Platform SE 8) — описание метода toString(), как наследуемого перечислениями из Object.
  3. Java enum – why use toString instead of name – Stack Overflow — обсуждение практического отличия между Enum.name() и Enum.toString().
  4. enum в Java – GeeksforGeeks — подробное объяснение Enum в Java.
  5. DZone – Java Enums: How to Use Configurable Method — глубокое погружение в работу с Enums.