首页 > 解决方案 > 如何改变“私有静态最终”参数?

问题描述

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

标签: javastaticprivatefinal

解决方案


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

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

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

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

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


推荐阅读