Перечисления VS Классы VS Интерфейсы - PullRequest
15 голосов
/ 26 мая 2011

Я читал много постов на этом сайте об использовании констант.

Вопрос: Когда мне следует использовать Enums для констант по сравнению с использованием классов или интерфейсов.

Я вижу 2 ключевые ситуации, на которые я обращаюсь.

1.Глобальные константы, используемые в приложениях несколькими проектами.

Пример:

  • Общие строки журнала
  • Ссылки на контейнер, такие как ссылка на отображение базы данных, используемая в WebSphere EAR

2.Специфичные для объекта константы

Пример:

  • Ставки заработной платы сотрудника для объекта сотрудника

Из всего, что я прочитал, я думаю, что у меня есть пониманиеи что я ищу мнение о.

Для ситуации 1: Подход к проектированию: использовать финальный класс и статический импорт.
Видно здесь: Что такое использование констант интерфейса?

Для ситуации2: Подход к дизайну: применить Enums для представления этих констант как объекта.

Дополнительные запоминания:

  • Если константная строка принадлежит классу и вам нужно только сохранить значение строки в классе, который ее использует
  • Don 'Используйте интерфейс для ситуации 1. Как упомянуто в ссылке выше как постоянный интерфейс Anti-pattern.,

Заранее спасибо за мысли и мнения.

Ответы [ 3 ]

12 голосов
/ 27 мая 2011

Глобальные константы, как вы их указали, должны находиться в файле свойств, поскольку это позволяет каждому приложению настраивать их индивидуально без изменения кода. Для констант, специфичных для объекта, мое общее эмпирическое правило о Enum против static final Я обычно склоняюсь к тому, сколько элементов должно быть и как связаны эти элементы. Если между ними есть большая связь, такая как Suits в колоде Cards, я бы выбрал перечисление. Если для пользователя задан возраст по умолчанию, он становится окончательным, поскольку нет цели сделать его перечислением, так как на него не нужно ссылаться во многих областях. Это лишь некоторые мысли о каждом из способов, которыми я подошел к нему.

3 голосов
/ 27 мая 2011
  1. Глобальные константы, используемые различными проектами : Enum
    Лучше использовать Enum над public static final членами в классе.Полагаю, более понятным и простым для понимания.

  2. Константы, специфичные для объекта : public static final members in Class.Поскольку они нужны только в рамках объекта, то для этого не нужно создавать новый Enum.

Nice read

Обновление (исправлена ​​неработающая ссылка):

  1. Использование Java 5.0: приемы Enum
  2. Использование Java 5.0: пример Enum
0 голосов
/ 27 мая 2011

Похоже, почти все, что вы перечислили для чисел 1 и 2, содержится в файлах конфигурации или таблицах базы данных.

Хотите ли вы перекомпилировать код, когда ваш сотрудник получит повышение или имя страницы изменится?

Если нет веской причины, все остальное, что является постоянным, должно моделироваться как перечисление. Таким образом вы реализуете преимущества быстрых сравнений на равенство объектов и избегаете проблем, связанных с строковыми константами.

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

...