如何更改“ private static final”参数?

时间:2019-06-24 19:15:32

标签: java static private final

我是Java和面向对象编程的新手,我有一个问题。有一个巨大的Java代码,其中包含多个包和剪贴簿(每个都有多个类)。它具有许多带有其值的“私有静态最终”参数。现在,我需要使这些值可变,这意味着我需要更改这些参数的值,并且每次运行代码以获取结果。如果我每次都更改代码并运行代码,这将不容易。我想一次将数字提供给代码(例如数字列表)并为此运行代码。知道如何在最少更改当前代码的情况下执行此操作吗?例如定义新的类,并将该类中的所有变量作为数组并使用for循环(如K_value = K(i))并将代码更改为例如将“私有静态最终int k = 10”改为“私有静态最终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)K = 5,Q = -5,M = 1和2)K = 5,Q = -5,M = 2 3)K = 5,Q = -10,M = 1,依此类推。

1 个答案:

答案 0 :(得分:1)

对于least amount of changes要求,我将回答您的问题。任何“快速且肮脏”的方法都将标记为@@@,我会敦促您不要在生产方案中使用它们(例如,将它们用于一次性测试目的或一些旧的继承的非关键代码)。之后,我将对概述的场景表达一些一般想法。

  1. 将环境变量(或系统属性)读取到静态最终变量中,并使用其环境变量/系统属性的不同值多次启动程序:private static final int someConst = Integer.parseInt(System.getEnv("someConst")) @@@ < / strong>

  2. 使变量为非最终变量,并在每次运行建议的for循环方法后更改其值。请注意,这非常脆弱/危险/容易出错,因为变量只能在一次读取一次。应用程序启动 @@@

  3. 重写使用给定常量的组件,以将值用作构造函数或函数参数。根据应用程序的大小或您对重构未知代码库的信心,这可能很困难。如果您有经过良好测试的应用程序,请考虑使用这种方法

在阅读您的问题时,我注意到概述的场景似乎是一种算法/逻辑,应该对输入值而不是常量进行操作(您描述了它们不再是常量)。如果可能的话,应该对代码进行重组以反映这些新情况:使其可实例化(添加构造函数参数)以获取不同的值,或者向受影响的函数/类添加参数。所有建议的修复程序仅是解决方法,可修改尽可能少的代码。我的建议:如果使用场景是针对生产环境的,请重写此代码;如果这是一次性的教程/测试/探索,请使用概述的变通办法之一。