1

我有一个类 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
    ...

}

但最后它看起来不是最好的方法,我对它不太满意:/也许你们可以用通常的/“最佳实践”方式来帮助我。

最好的问候

4

3 回答 3

1

我只会使用 java.util.Properties 或一些包装器。另一个好方法是 java bean 和类似 xstream 的东西来保存/加载东西。

于 2012-12-03T18:08:20.453 回答
0

通常在 Java 中用于配置使用属性文件。然后使用 ResuorseBundle 读取属性。

您的“单身人士”不是传统意义上的单身人士。1)字段实例必须是私有的 2)删除 SetInstance 方法 3)你应该让你的单例线程安全。

于 2012-12-03T18:16:34.520 回答
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 即将发布,它还将包括“热重载”和许多改进。

于 2013-06-23T22:23:07.373 回答