У меня есть проект, состоящий из 5 разных пакетов на Java. Все они содержат классы с магическими числами и жестко заданными строками, для которых я хочу создать константы. Я хотел бы знать, что является лучшей практикой. Должен ли я создать один класс констант для всех констант в программе, которые все классы могут импортировать? Или было бы более эффективно разделить константы на несколько файлов меньшего размера?
Константы Java в пакетах
Ответы (1)
С точки зрения передового опыта см. Принцип наименьших привилегий.
Вы должны извлекать встроенные жестко закодированные константы, но вы не должны не помещать все константы в один монолитный класс. Вместо этого разделите константы на контекстуально подходящие классы («несколько файлов меньшего размера») и сохраните эти классы только на уровне пакета, на который нужно правильно ссылаться.
Если значение относится только к одному конкретному классу (также известному как private static final
), нет необходимости удалять это значение из класса. Это только создаст больше работы, чтобы сохранить его в другом месте, если на него ссылаются только в этом одном месте.
Если значение действует как глобальная переменная или к нему нужно получить доступ во многих разных классах (иначе public static final
), извлечение связанных значений в отдельный класс имеет смысл, но, вероятно, это запах кода, который вам следует изучить.
Поскольку вы используете пакеты, рассмотрите возможность использования package-private (static final
), чтобы изолировать значения конфигурации для одного пакета, который в них нуждается.
Рассмотрите возможность использования файлов конфигурации/свойств для ввода значений вместо того, чтобы явно жестко кодировать их в классе. В зависимости от ваших потребностей вы можете использовать простые свойства Java или существует множество библиотек/фреймворков, которые могут помочь вам обрабатывать свойства, такие как Весна.
Integer.MAX_VALUE
хорошо; IntegerConstants.MAX_VALUE было бы бессмысленным разделением. И уж точно не стоит делать один класс, содержащий константы из всех пакетов. - person VGR   schedule 19.07.2017enum
s. - person Andrew S   schedule 19.07.2017