Где хранить константы java

Идеальный способ организовать Java-константы

У нас есть огромные проекты, основанные на старом jdk 1.4. Мы перенесли веб-приложение в JDK 1.6, но в коде существует много неэффективных практик и плохой дизайн. В основной точке боли огромные классы Java 2500+ строк кода в одном файле java. Так много таких файлов. В попытке реорганизовать классы, которые я начал, удалили константы и поместили константы в другой файл Constants.java. но так как существует огромное количество констант, находящихся вне приложения, файл констант имеет риск роста до огромных размеров. Я был бы признателен за отзывы о том, какая стратегия разработчики принимают, чтобы сохранить код чистым и поддерживаемым.

Один класс Constants звучит как антипаттерн. Разделите их в зависимости от значения констант или замените их перечислениями, где это необходимо.

Как профилактическое средство, подключите электроды к разработчикам, которые будут шокировать их напряжением около 0,01 В при каждом сохранении файла.

Какие конкретные проблемы вы пытаетесь решить? Просто тот факт, что файлы слишком велики? Если это так, то затраты на рефакторинг всего не будут стоить этого.

Это не просто длина / размер файла. Это нарушение обязанностей каждого класса, а также класса, представляющего несколько контрактов. Класс EJB для хранения значений домашней страницы (модель) также создает и обрабатывает структуры кэширования для HTML-шаблонов. Это только один пример

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

8 ответов

Сохраняйте свои константы в классе, с которым они связаны, не чувствуйте себя обязанным их извлекать. Он может очистить код класса, но смешивание несвязанных констант в файле не является улучшением.

Держите вещи вместе.

А также вы можете конвертировать их в Enums, когда это возможно/полезно (но это может потребовать некоторого рефакторинга).

Но тогда всегда существует риск дублирования значений для констант. Например, имя таблицы «user_profile» хранится в нескольких константах, таких как EMPLOYER_USER_PROFILE и WEB_USER_PROFILE. и т.п.

Почему вы не можете сохранить имя таблицы как константу в классе DAO (класс для этой таблицы), а затем использовать эту константу из других классов? (требуется объявить константу как общедоступную)

@RegMem вы можете использовать checkstyle и, возможно, другие статические анализаторы кода, чтобы находить идентичные строки и помещать предупреждающий (или «информационный», как я использую) тег на дубликаты.

Помещение всех констант в один файл — ужасная идея! Особенно анти-шаблон uber-Constant, где все константы находятся в Interface , которые каждый класс должен implement . 10 способов воскресенья ужасно! Это была плохая идея, когда люди начали делать это еще в начале 1990 года перед Java! Это определенно плохая идея в 2012 году.

Читайте также:  Java new file in new directory

Это означает, что вы смешиваете много несвязанной информации и создаете ненужные зависимости каждый раз, когда вы импортируете этот файл uber-Constants. Вещи, которые идут вместе, должны быть вместе в Enum или, по крайней мере, в Class , который использует их в качестве аргументов для своих методов, чтобы при их изменении вы знали, как легко провести анализ последствий.

Представьте константы Color , смешанные с константами DaysOfTheWeek , смешанными с другими константами бизнес-домена, и в одном файле будут сотни, если не тысячи этих вещей. Как это можно считать хорошей идеей? В каждом несобранном случае лучше использовать Enum , являющийся public inner членом Class .

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

При проектировании и рефакторинге вы всегда должны:

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

Стремитесь к свободному соединению, это означает, что не позволяйте несвязанным вещам течь в другие несвязанные области.

Стремитесь к самодокументируемому поддерживаемому коду, десятки или сотни деклараций private static final String/int , все смешанные вместе, не соответствуют этому определению любым стандартом!

В 2012 году константы C-стиля являются слабым решением, когда теперь у вас Enum как инструмент, вы должны сосредоточиться на преобразовании как можно большего числа этих групп констант в Enum , где это возможно. Enum безопасен по типу и может иметь к нему другие атрибуты, свойства и поведения, чтобы сделать их intelligent . Это путь вниз.

Источник

Константы в Java

Константа — постоянное значение, известное до начала работы программы и заданное в коде один раз.

Почему это удобно:

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

По логике это надо бы называть «постоянной» — в противоположность переменной, — но традиция уже сложилась.

Константа может хранить число, строку, символ, ссылку на объект и др. Значение константы еще называют литералом (от англ. literal — буквальный), потому что его записывают как есть — без предварительных вычислений.

При объявлении констант в Java используют ключевое слово final — оно показывает, что литерал не должен меняться. Именовать константы принято заглавными буквами со знаком подчеркивания вместо пробела: ВОТ_ТАК.

Пример строковой константы:

public static final String MY_CONSTANT="Мой текст"; //создаем строку и присваиваем ей постоянное значение 

Модификаторы public и static означают, что перед нами публичная константа уровня класса — без привязки к отдельным объектам, классам и т.д. Это аналог глобальной константы в Java. Значение константы всегда указывают при её создании. Если инициализация отложена, перед нами не константа, а «финальная переменная». Её значение тоже обычно задают только один раз, но:

  • оно может быть получено в результате вычислений;
  • если внутри финальной переменной лежит объект, его свойства можно менять, т.к. финализация действует на ссылку, а не на значение.
Читайте также:  Простой пример использования GET

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

Неименованные константы в Java

Неименованная константа — постоянное произвольное значение, которое вносят в код однократно:

if (i  5 ) // 5 - это константа; 

Если значение нужно использовать ещё где-то, лучше вынести его в именованную константу или финальную переменную.

Константы встроенных классов Java

Класс Integer в Джаве отвечает за обработку целых чисел типа int. Ограничителями диапазона значений int служат константы MIN_VALUE (минимальное значение) и MAX_VALUE (максимальное). Константы с теми же именами существуют и в остальных классах для обработки числовых данных: byte, long, float, double. При создании объекта нужного типа классы обращаются к пулам — массивам констант Java, где хранятся допустимые элементы диапазона.

Где хранить константы

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

Источник

Java+Kotlin=Love

Site about programming in Java, its features and surprises with examples of coding.

Еще раз о хранении констант

Есть много способов хранить константы в теле программы. И статические финализированные переменные, и переменные, объявленные в интерфейсе (что больше всего рекомендуют в книгах по Java. Однако, в одной из последних книг была высказана мысль, отвечающая принципу «чистого кода»: интерфейс должен использоваться по назначению. А для хранения констант следует использовать класс, для этого и предназначенный — это перечисления — Enum.
Мы привыкли Enum использовать только для перечисляемых типов данных, но в Java можно догрузить этот класс под все наши нужды. Например, для хранения целых констант:

public enum IntConstant < CONST_1(1), CONST_2(2), CONST_3(3), CONST_4(4), CONST_5(5) ; private int val = 0; IntConstant(int val) < this.val = val; >public int getVal() < return val; >>

Таким образом мы можем обращаться с константами совершенно прозрачно:

System.out.println(IntConstant.CONST_1);

А если укажем статический импорт класса IntConstant в разделе импорта:

import static пакетсклассом.IntConstant.*;

Если же нам нужно значение константы, то вызываем его через «геттер»:

Конечно, эта непрозрачность самого значения константы, как главного из-за чего константа-то и заводилась, может вызвать неприязнь, но она с толикой компенсируется другими бонусами класса Enum. Ведь в дальнейшем, можно подгружать этот класс многими полезными фичами, которые в результате значительно сократят код программы и сделают её удобнее, а код — прозрачнее.

Источник

Где хранить константы java

Запись: Velonski/mytetra-database/master/base/1531392796znkawobabj/text.html на raw.githubusercontent.com

Константа — постоянное значение, известное до начала работы программы и заданное в коде один раз.

Если вы используете значение многократно, а в ходе разработки его потребуется изменить, достаточно будет одной правки.

Вместо длинного значения можно ставить в коде короткое имя константы.

Нет риска ошибиться при очередном вводе значения.

По логике это надо бы называть «постоянной» — в противоположность переменной, — но традиция уже сложилась.

Константа может хранить число, строку, символ, ссылку на объект и др. Значение константы еще называют литералом (от англ. literal — буквальный), потому что его записывают как есть — без предварительных вычислений.

При объявлении констант в Java используют ключевое слово final — оно показывает, что литерал не должен меняться. Именовать константы принято заглавными буквами со знаком подчеркивания вместо пробела: ВОТ_ТАК.

Пример строковой константы:

public static final String MY_CONSTANT=»Мой текст»;

//создаем строку и присваиваем ей постоянное значение

Модификаторы public и static означают, что перед нами публичная константа уровня класса — без привязки к отдельным объектам, классам и т.д. Это аналог глобальной константы в Java. Значение константы всегда указывают при её создании. Если инициализация отложена, перед нами не константа, а «финальная переменная». Её значение тоже обычно задают только один раз, но:

оно может быть получено в результате вычислений;

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

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

Неименованные константы в Java

Неименованная константа — постоянное произвольное значение, которое вносят в код однократно:

Если значение нужно использовать ещё где-то, лучше вынести его в именованную константу или финальную переменную.

Константы встроенных классов Java

Класс Integer в Джаве отвечает за обработку целых чисел типа int. Ограничителями диапазона значений int служат константы MIN_VALUE (минимальное значение) и MAX_VALUE (максимальное). Константы с теми же именами существуют и в остальных классах для обработки числовых данных: byte, long, float, double. При создании объекта нужного типа классы обращаются к пулам — массивам констант Java, где хранятся допустимые элементы диапазона.

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

  • Работа с Java в командной строке
  • Создание и использование архивов Java
  • Ликбез
  • Константы в Java
  • Перечисления enum
  • Compile and Run Java in Command Line with External Jars
  • Updating a JAR File
  • Compiling a java program into an executable [duplicate]
  • Launch4j — Cross-platform Java executable wrapper
  • Пакетирование и распространение настольных приложений Java

Источник

Оцените статью