и предположил, что у меня мог бы быть класс Constants, в который можно было бы обернуть константы, объявив их статическими final . Я практически не знаю Java вообще, и мне интересно, лучший ли это способ создания констант.
Переведено автоматически
Ответ 1
Это вполне приемлемо, возможно, даже стандартно.
(public/private) staticfinalTYPENAME= VALUE;
где TYPE - тип, NAME - имя, набранное заглавными буквами с подчеркиванием пробелов, и VALUE - постоянное значение;
Я настоятельно рекомендую НЕ помещать ваши константы в их собственные классы или интерфейсы.
В качестве дополнительного примечания: переменные, которые объявлены final и являются изменяемыми, все равно могут быть изменены; однако переменная никогда не может указывать на другой объект.
Например:
publicstaticfinalPointORIGIN=newPoint(0,0);
publicstaticvoidmain(String[] args){
ORIGIN.x = 3;
}
Это законно и ORIGIN тогда была бы точка в (3, 0).
Ответ 2
Я бы настоятельно не советовал использовать один класс constants. В то время это может показаться хорошей идеей, но когда разработчики отказываются документировать константы и класс разрастается до более чем 500 констант, которые вообще не связаны друг с другом (будучи связанными с совершенно разными аспектами приложения), это обычно приводит к тому, что файл констант становится полностью нечитаемым. Вместо этого:
Если у вас есть доступ к Java 5+, используйте перечисления, чтобы определить ваши конкретные константы для области приложения. Все части области приложения должны ссылаться на перечисления, а не на постоянные значения для этих констант. Вы можете объявить перечисление аналогично тому, как вы объявляете класс. Перечисления, пожалуй, самая (и, возможно, единственная) полезная функция Java 5+.
Если у вас есть константы, которые допустимы только для определенного класса или одного из его подклассов, объявите их либо как защищенные, либо как общедоступные и поместите их в верхний класс в иерархии. Таким образом, подклассы могут получить доступ к этим постоянным значениям (и если другие классы получают к ним доступ через public, константы действительны не только для определенного класса ... что означает, что внешние классы, использующие эту константу, могут быть слишком тесно связаны с классом, содержащим константу)
Если у вас есть интерфейс с определенным поведением, но возвращаемые значения или аргументы должны быть конкретными, вполне допустимо определить константы в этом интерфейсе, чтобы другие разработчики имели к ним доступ. Однако избегайте создания интерфейса только для хранения констант: он может стать таким же плохим, как класс, созданный только для хранения констант.
Ответ 3
Это ПЛОХАЯ ПРАКТИКА использовать интерфейсы только для хранения констант (названный Джошем Блохом constant interface pattern). Вот что советует Джош.:
Если константы сильно привязаны к существующему классу или интерфейсу, вам следует добавить их в класс или интерфейс. Например, все упакованные классы числовых примитивов, такие как Integer и Double, экспортируют константы MIN_VALUE и MAX_VALUE. Если константы лучше всего рассматривать как члены перечисляемого типа, вам следует экспортировать их с типом enum. В противном случае вам следует экспортировать константы с помощью неинсталлируемого служебного класса.
По соглашению, такие поля имеют имена, состоящие из заглавных букв, со словами, разделенными подчеркиванием. Важно, чтобы эти поля содержали либо примитивные значения, либо ссылки на неизменяемые объекты.
Ответ 4
В Effective Java (2-я редакция) рекомендуется использовать перечисления вместо статических целых чисел для констант.