编写程序时,我通常使用java.util.Properties类来加载包含配置参数的属性文件。
我通常编写一个实用程序类,它具有检索单个属性的方法,例如:
public long getConnectionTimeout() {
String textVal=getProperty("connectionTimeout", "1000");
return Long.parseLong(textVal);
}
这种方法很适合我,但是当需要处理很长的属性列表时,它会变得有点乏味。
我正在寻找更好的方法来做到这一点。
感谢。
答案 0 :(得分:4)
使用HashMap
存储将与您的属性文件关联的属性,如下所示。在实用程序类中,创建一个HashMap
实例字段。
HashMap<String,String> propertiesMap;
然后在构造函数或初始化方法中初始化它,您更喜欢。
propertiesMap = new HashMap<String,String>();
使用来自属性文件的数据填充hashmap。
for (String key : properties.stringPropertyNames())
{
String value = properties.getProperty(key);
propertiesMap.put(key, value);
}
然后编写一个泛型方法来获取名称为
的特定属性public String getProperty(String name)
{
return propertiesMap.get(name);
}
答案 1 :(得分:1)
如果您正在使用Java EE,则可以尝试使用此方法,该方法利用CDI(上下文和依赖注入): Applicaction configuration in Java EE 6 using CDI
答案 2 :(得分:1)
另一种方法是使用Enums。 这样,您就可以使用常量直接访问属性。
public static void main(String[] args) {
System.out.println(Properties.USER_NAME.getValue(String.class));
System.out.println(Properties.CONNECTIION_TIMEOUT.getValue(Integer.class));
}
enum Properties {
CONNECTIION_TIMEOUT {
@Override
public <T> T getValue(Class<T> toClass) {
return toClass.cast(1000);//your code goes here
}
},
USER_NAME {
@Override
public <T> T getValue(Class<T> toClass) {
return toClass.cast("Test");//your code goes here
}
},
PASS_WORD {
@Override
public <T> T getValue(Class<T> toClass) {
return toClass.cast("Test");//your code goes here
}
};
public abstract <T> T getValue(Class<T> toClass);
}