Свойства или Перечисления или статический финал
Когда дело доходит до объявления предопределенных констант в паре имя-значение, я случайно выбирал между "java.util.Properties", "enums" или отдельным классом со значениями "public static final".
Для дальнейшего использования мне нужны некоторые рекомендации по поводу того, какой подход выбрать.
Спасибо!
4 ответа
Все зависит от вашего постоянного жизненного цикла. Постоянные по определению не двигаются. Выбор правильных методов будет зависеть от вероятности изменений и необходимости переупаковки.
Если вы действительно уверены, он не будет двигаться никогда: статический финал - это путь. Пи, математические константы и тому подобное - хороший пример.
Если вы думаете, что есть потенциальное изменение, но нуждаетесь в легкости манипулирования кодом и не боитесь восходящей совместимости, перечисления в порядке. Я сделал это для кода ошибки некоторое время назад.
Если вы думаете, что есть потенциальное изменение, но не хотите, чтобы это изменение повлияло на ваш код, лучше выбрать свойства (с пакетом ресурсов). Ярлыки (переводы), начальные настройки и т. Д. Также являются хорошим примером.
static final
поля используются, когда вы не можете сформировать определенный набор закрытых опций, из которых вы можете выбрать состояние переменной. Наоборот, когда вы можете, вы всегда используете перечисления.
Теперь, когда вы хотите сохранить словарь значений ключей, независимо от их природы, пришло время использовать объект типа Properties или иногда Map.
Еще одна вещь для рассмотрения - будут ли эти строки меняться в разных версиях? то есть у вас может быть французская версия, китайская версия, "продвинутая" версия? Если это так, свойства / ResourceBundles и т. Д. Путь.
Используйте Enums, когда ваш набор констант фиксирован и не ожидается частого изменения. Если он часто меняется, то трудно поддерживать обратную совместимость с вашими предыдущими версиями. Если в архитектуре клиент-сервер оба имеют разные версии некоторых Enum. Например
Сервер: public enum Priority{
HIGH,LOW,MEDIUM,AVERAGE
}
Клиент: public enum Priority{
HIGH,LOW,MEDIUM}
Допустим, если сервер отправит Priority.AVERAGE клиенту, клиент выдаст исключение.