Код: Выделить всё
public interface JdbcSettings extends C3p0Settings, ProxoolSettings, AgroalSettings, HikariCPSettings {...}
Загрязнение пространства имен . Именованные константы появляются в пространстве имен
всех реализующих классов, а также их подклассов.
Это не наш случай, потому что мы говорим об интерфейсах, которые никогда не будет реализован.
Интерфейсы должны определять типы. В Java большинство основных типов
проекта должны быть представлены интерфейсами. Константный интерфейс по
по своей природе не определяет тип.
То же самое можно сказать и о классе.
Неинстантируемые классы со статическим импортом. Объявление констант как
статических конечных полей в классе (а не в интерфейсе) достигает всех
тех же целей, что и объявление их в интерфейсе. Это
не приведет к загрязнению пространства имен классом. При желании эти
константы можно использовать без уточняющего имени класса с помощью статического объявления
import.
Интерфейсы должны определять поведение. Предполагается, что интерфейс определяет
контракт между интерфейсом и реализующими его классами.
Предполагается, что реализация интерфейса что-то говорит о том, что
может делать класс. Константные интерфейсы не следуют этому шаблону.
Но классы в Java определяют схему создания объектов, инкапсулируя данные и поведение в единую сущность.
Насколько я понимаю, класс и интерфейс не должны были быть держателями констант. Но использование интерфейса дает гибкость при множественном наследовании.
Итак, мой вопрос: если мы используем интерфейс ТОЛЬКО для хранения констант, является ли это антишаблоном?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ti-pattern