我想读取配置文件的属性并将其分配给static final
变量,如果配置文件是省略/不存在,则使用默认值硬编码。
public static final String NOTIFY_ALI;
static {
try {
PropertyReader notifyConf = new PropertyReader("notify.conf");
NOTIFY_ALI = notifyConf.getProperty("notify_ali","http://notify.foo.com/notify");
} catch (IOException e) {
e.printStackTrace();
NOTIFY_ALI = "http://notify.foo.com/notify";
}
}
NOTIFY_ALI
应由配置文件notify.conf
使用密钥notify_ali
分配,或者如果文件中未明确,则将http://notify.foo.com/notify
作为默认值。如果配置文件不存在(将发生IOException
),只需捕获异常并分配默认值。
但是上面的代码片段给出了编译时间Err:
Error:(18, 13) java: variable NOTIFY_ALI might already have been assigned
我可以这样做吗?
答案 0 :(得分:2)
创建一个返回URL的方法,并在声明
时用于指定它public static final String NOTIFY_ALI = getURL() ;
private static String getURL()
{
String aux ;
try {
PropertyReader notifyConf = new PropertyReader("notify.conf");
aux = notifyConf.getProperty("notify_ali","http://notify.foo.com/notify");
} catch (IOException e) {
e.printStackTrace();
aux = "http://notify.foo.com/notify";
}
return aux ;
}
如果你需要初始化多个变量,你可以这样做
public static final InitVariables IV = initVariables() ;
public class InitVariables {
String NOTIFY_ALI ;
String CONTACT_EMAIL ;
int numEmployees ;
}
private static InitVariables initVariables()
{
InitVariables iv ;
iv = new InitVariables() ;
try {
PropertyReader notifyConf = new PropertyReader("notify.conf");
aux = notifyConf.getProperty("notify_ali","http://notify.foo.com/notify");
} catch (IOException e) {
e.printStackTrace();
aux = "http://notify.foo.com/notify";
}
iv.NOTIFY_ALI = aux ;
iv.CONTACT_EMAIL = "you@somedomain.com";
iv.numEmployees = 0 ;
return iv ;
}
答案 1 :(得分:1)
为什么不删除静态初始化程序块并创建一个静态方法,其结果分配给静态最终变量?
public static final String NOTIFY_ALI = init();
private static String init() {
try {
PropertyReader notifyConf = new PropertyReader("notify.conf");
return notifyConf.getProperty("notify_ali","http://notify.foo.com/notify");
} catch (IOException e) {
e.printStackTrace();
return "http://notify.foo.com/notify";
}
}