单例配置类?具体的例子

时间:2012-11-05 08:58:28

标签: java apache-commons-config

我已经开始阅读Apache commons文档,但它非常广泛,所以我希望有人可以回答一个简单的问题,所以我不需要阅读所有内容只是为了开始使用它进行基本配置。我很快就失去了耐心 - 没有“快速启动章节”,在我决定是否要使用该库之前,我不需要知道每个细节。

我想(我认为是一个常见的用例)一个带有静态方法的类,它提供了属性的查找。

E.g。在Foo类我可以使用

Settings.config.getString("paramter"); 

哪里

 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 /**
  * Settings configuration class
  */
 public class Settings  {

     private static final DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); 
     public static final Configuration config= factory.getConfiguration();

}

问题是工厂方法可以抛出异常!所以这段代码不能编译,一个类也不能抛出异常,所以我怀疑我需要做更多的编码。

我怀疑有一个简单的解决方案。但肯定不能打电话

DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml"); 
Configuration config= factory.getConfiguration();

在每个我想阅读配置的课程中?


我试过了:

public class Settings  {
 public static final Configuration config;
 static {
     try {
    DefaultConfigurationBuilder factory; 
    factory = new DefaultConfigurationBuilder("config.xml") ; 
         config = factory.getConfiguration();
     }
     catch (ConfigurationException e) {
         // Deal with the exception
    config=null;
    System.exit(1);
     }
 }
}

但是我得到了编译错误:

 error: variable config might already have been assigned
   [javac]      config=null;

1 个答案:

答案 0 :(得分:3)

您可以将代码置于静态初始化程序块中初始化config并在那里处理异常。例如:

public class Settings {
    public static final Configuration config;

    static {
        Configuration c = null;
        try {
            DefaultConfigurationBuilder factory = new DefaultConfigurationBuilder("config.xml");
            c = factory.getConfiguration();
        }
        catch (SomeException e) {
            // Deal with the exception
            c = null;
        }

        config = c;
    }
}