2012-01-14 4 views
3

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

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

Спасибо!

+0

У меня лично есть файл класса с общедоступными статическими конечными значениями. Я нахожу это легкомысленным, и я знаю, где искать. Если вы начинаете вводить перечисления или что-либо в определенных классах, теперь вы должны помнить, в каком классе он находится. Что касается производительности, я не знаю. Я уверен, что кто-то еще сможет ответить на это. –

ответ

4

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

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

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

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

+0

Пожалуйста, добавьте более подробную информацию о прейскуранте перечисления ... – SlowAndSteady

+1

@Raj Использовать перечисления для постоянного набора, например. в карточных играх у вас есть Spades, Clubs, Hearts \t и Diamonds. Другим случаем может быть поддержка файловых типов PNG, GIF и т. Д. Не будет недостатка, если вы добавите более поздний BMP, так как тогда у вас будет другая версия API, включая перечисление, соответствующее новой реализации. – stacker

+0

Очень тщательный ответ. +1. Радж: вы должны также принять к сведению комментарий @Sean Reilly о моем ответе. –

2

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

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

+5

Если вам нужны пары ключ-значение, а ключи заданы с закрытыми параметрами, тогда рассмотрите объединение переходов и подходов к карте с помощью java.util.EnumMap –

+0

Действительно. Кроме того, обратите внимание, что если вы используете константы, а не * действительно * значения из закрытого набора с конкретным значением домена, то лучший способ - статические окончательные. Кроме того, если вы используете константы только в своем классе, подумайте об изменении модификатора 'public' на' private'. –

0

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

0

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

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

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

Допустим, если сервер отправляет Priority.AVERAGE к клиенту, то клиент будет бросать исключение.

 Смежные вопросы

  • Нет связанных вопросов^_^