3

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

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

例如在类 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;
4

1 回答 1

4

您可以将要初始化的代码放在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;
    }
}
于 2012-11-05T09:02:18.853 回答