我有一个类似于Config的课程:
public Class Config {
public static int someIntValue = 0;
public static String someText = "some text";
}
我现在要做的是保存并加载该配置,如果不需要加载另一个配置,还有初始配置。所以配置可以在程序中的任何一点改变。
我想出的是像Singelton一样的模式
public Class Config {
public static Config instance;
private int someIntValue = 0;
private int String someText = "some text";
public static Config getInstance(){
if(instance == null)
instance = new Config();
return instance;
}
public void setInstance(Config config){
this.instance = config;
}
//getter/setter
...
}
但最后它看起来不是最好的方法,我对它不太满意:/ 也许你们可以帮助我解决常见的"最佳实践"这样做的方法。
最诚挚的问候 由
答案 0 :(得分:1)
我只想使用java.util.Properties,或者使用它的一些包装器。另一个好的方法是java bean,比如xstream来保存/加载东西。
答案 1 :(得分:0)
通常在Java中用于配置使用属性文件。然后使用ResuorseBundle读取属性。
你的“单身人士”不是传统意义上的单身人士。 1)字段实例必须是私有的 2)删除SetInstance方法 3)你应该让你的单身人士线程安全。
答案 2 :(得分:0)
如果您考虑避免在java.util.Properties周围编写样板代码,您可以查看为您执行此操作的内容:OWNER API。
它可以配置为定制您的需求,与java.util.Properties(阅读文档)相比,它提供了一些额外的简洁功能。
实施例。您可以使用配置参数定义接口:
public interface ServerConfig extends Config {
int port();
String hostname();
@DefaultValue("42")
int maxThreads();
@DefaultValue("1.0")
String version();
}
然后你就这样使用它:
public class MyApp {
private static ServerConfig cfg = ConfigFactory.create(ServerConfig.class);
private MainWindow window;
public MyApp() {
// you can pass the cfg object as dependency, example:
window = new MainWindow(cfg);
}
public void start() {
window.show();
}
public static void main(String[] args) {
// you can use it directly, example:
System.out.println("MyApp version " + cfg.version() + " copyright (c) ACME corp.");
MyApp app = new MyApp();
app.start();
}
}
您可以将cfg对象定义为所需类的成员实例,也可以将实例传递给您需要的构造函数和方法。
版本1.0.4即将发布,它还将包括“热重载”和许多改进。