java - 如何改变 "private static final"参数?

标签 java static private final

我是 java 和面向对象编程的新手,我有一个问题。有一个巨大的java代码,其中有多个包和剪贴簿(每个包和剪贴簿都有几个类)。它有许多“私有(private)静态最终”参数及其值。现在,我需要使这些值成为变量,这意味着我需要更改这些参数的值,并且每次运行代码以获得结果。如果我每次都更改代码并运行代码,这并不容易。我想将数字一次性提供给代码(如数字列表)并运行代码。知道如何在对当前代码进行最少更改的情况下做到这一点吗?例如,定义新类并将该类中的所有变量作为数组并使用像 K_value=K(i) 这样的 for 循环,并将代码从例如“私有(private)静态最终 int k = 10”到“私有(private)静态最终 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 等等。

最佳答案

我将回答您有关最少更改量要求的问题。任何“快速而肮脏”的方法都将被标记为@@@,我会敦促您不要在生产场景中使用它们(例如,仅将它们用于一个-off 测试目的或一些旧的继承的非关键代码)。之后我将表达一些关于概述场景的一般想法。

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

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

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

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

关于java - 如何改变 "private static final"参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56742652/

相关文章:

java - 为什么 Servlet.service 被设计为返回 void?

java - 如何避免在 HttpServletRequest 中过滤文件名

python - 如何在预测中结合静态特征和时间序列

java - 我可以在调试期间更改私有(private)字段的值吗?

vb.net - 反射(reflection):如果该属性具有非公共(public)(私有(private)/ protected )Setter,如何从属性信息对象中查找?

java - 如何使用 xpath 访问 div id?[selenium webdriver]

java - Facebook OAuth 异常 : redirect_uri missing

c# - 静态方法和多线程

C++ (gcc/g++) 两个巨大的字符串数组需要很长时间才能编译

JavaScript 对象私有(private)参数