我已经开始阅读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;
答案 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;
}
}