gpt4 book ai didi

Java:使常量可以在任何地方访问

转载 作者:行者123 更新时间:2023-12-01 20:53:46 25 4
gpt4 key购买 nike

我有一个 Java 程序,应该从文件中读取配置参数,如下所示:

java -jar myapp.jar --config config.txt ...

一旦加载,这些参数就不会改变,并且应该可以被程序中的任何类访问。

是否可以从任何类访问这些参数,而无需显式地将它们作为参数添加到构造函数和方法中?例如,我希望能够做到这一点:

public class Main {

public static void main(String[] args){

// This list should be visible by any class
List<String> CONFIGS= readMyConfigsFromFile(args[0]);
...
}
}

public class MyClass(){
public MyClass(){
String thisConf= CONFIGS.get(0); // Do something with this conf param taken from Main.
...
}
}

public class MyOtherClass(){
public MyOtherClass(){
String thisConf= CONFIGS.get(0); // Do something with this conf param taken from Main.
...
}
}
...

这可能吗?这是一个明智的设置吗?如果没有,推荐的设计是什么?

(我读过类似的问题,但我仍然不确定在我描述的情况下是否以及如何可能)

最佳答案

您可以使用单例模式。

为了对其进行建模,我假设您的配置中有 2 个字段:一个字符串和一个整数。

public class Config {
private static Config INSTANCE;

private final String field1;
private final int field2;

public Config(String field1, int field2) {
this.field1 = field1;
this.field2 = field2;
}

public String getField1() {
return field1;
}

public int getField2() {
return field2;
}

public static Config getInstance() {
if (INSTANCE == null) {
INSTANCE = loadInstance();
}
return INSTANCE;
}

private static Config loadInstance() {
// read your config from properties
String field1 = ...
int field2 = ...
return new Config(field1, field2);
}
}

然后在需要获取该实例的任何地方使用 Config.getInstance()

请注意,此实现有一个缺陷:如果从不同的 thead 调用 getInstance(),它可能会被初始化多次。

双重检查锁定https://en.wikipedia.org/wiki/Double-checked_locking如果您只需要初始化一次,则可以用来克服此缺陷。

关于Java:使常量可以在任何地方访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42744985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com