Свойства или Перечисления или статический финал - PullRequest
3 голосов
/ 14 января 2012

Когда дело доходит до объявления предопределенных констант в паре имя-значение, я случайно выбирал между «java.util.Properties», «enums» или отдельным классом со значениями «public static final».

Для дальнейшего использования мне нужны некоторые рекомендации по поводу того, какой подход выбрать.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 14 января 2012

Все зависит от вашего постоянного жизненного цикла.Постоянные по определению не двигаются.Выбор правильных методов будет зависеть от вероятности изменений и необходимости переупаковки.

  • Если вы действительно уверены, это никогда не сдвинется с места: статический финал - это путь.Pi, математические константы и тому подобное являются хорошим примером.

  • Если вы думаете, что есть потенциальное изменение, но нуждаетесь в простоте манипулирования кодом и не боитесь восходящей совместимости, перечисленияХорошо.Я сделал это для кода ошибки некоторое время назад.

  • Если вы думаете, что есть потенциальное изменение, но вы не хотите, чтобы это изменение повлияло на ваш код, свойства (с пакетом ресурсов)лучший выбор.Ярлыки (переводы), начальные настройки и т. Д. Также являются хорошим примером.

2 голосов
/ 14 января 2012

static final поля используются, когда вы не можете сформировать определенный набор закрытых опций, из которых вы можете выбрать состояние переменной. Напротив, когда вы можете, вы всегда используете перечисления.

Теперь, когда вы хотите сохранить словарь значений ключей, независимо от их природы, пришло время использовать объект типа Properties или иногда Map.

0 голосов
/ 09 октября 2015

Используйте Enums, когда ваш набор констант фиксирован и не ожидается частого изменения.Если он часто меняется, то трудно поддерживать обратную совместимость с вашими предыдущими версиями.Если в архитектуре клиент-сервер оба имеют разные версии некоторых Enum.Например,

Сервер: public enum Priority{ HIGH,LOW,MEDIUM,AVERAGE}

Клиент: public enum Priority{ HIGH,LOW,MEDIUM}

Скажем, если сервер отправит Priority.AVERAGE клиенту, тогда клиент выдаст исключение.

0 голосов
/ 14 января 2012

Еще одна вещь, которую стоит учесть - изменятся ли эти строки в разных версиях?то есть у вас может быть французская версия, китайская версия, "продвинутая" версия?Если это так, свойства / ResourceBundles и т. Д. Путь.

...