Как изменить параметр "private static final"? - PullRequest
0 голосов
/ 24 июня 2019

Я новичок в Java и объектно-ориентированном программировании, и у меня есть вопрос.Существует огромный код Java, который имеет несколько пакетов и записок (у каждого есть несколько классов).Он имеет много параметров "private static final" со своими значениями.Теперь мне нужно сделать эти значения переменными, что означает, что мне нужно изменить значение этих параметров и каждый раз запускать код, чтобы получить результат.Будет нелегко, если я каждый раз меняю код и запускаю код.Я хочу дать цифры один раз к коду (например, список номеров) и запустить код для этого.Есть идеи, как сделать это с наименьшими изменениями в текущем коде?Например, определите новый класс и передайте все переменные в этом классе в виде массива и с циклом for, например, K_value = K (i), и измените код, например, с "private static final int k = 10" на "private static final int k = K_value».Для ясности предположим:

private static final K= 5
private static final Q= -5
private static final M= 1

, а K может быть: 5, 10, 15 Q может быть -5, -10, -15, -20, а M может быть 1, 2, и я хочузапустить код со всеми / частичными комбинациями вышеуказанных значений.например: 1) К = 5, Q = -5, М = 1 и 2) К = 5, Q = -5, М = 2 3) К = 5, Q = -10, М = 1 и т. д.

1 Ответ

1 голос
/ 24 июня 2019

Я отвечу на ваш вопрос относительно требования least amount of changes.Любой подход «быстрый и грязный» будет помечен @@@, и я бы настоятельно рекомендовал не использовать их в производственном сценарии (например, просто использовать их для одноразовых целей тестирования или для некоторых старых унаследованных). некритический код).Позже я выскажу некоторые общие соображения по поводу изложенного сценария.

  1. Считать переменную среды (или системное свойство) в статические конечные переменные и запустить программу несколько раз с другим значением для еепеременная окружения / системное свойство: private static final int someConst = Integer.parseInt(System.getEnv("someConst")) @@@

  2. Сделайте переменную не конечной и меняйте значение после каждого запуска предложенного метода цикла.Обратите внимание, что это очень хрупкий / опасный / подверженный ошибкам, поскольку переменные могут считываться только один раз, например, при запуске приложения @@@

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

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

...