+-

我正在尝试初始化静态最终变量.但是,这个变量在一个可以抛出异常的方法中初始化,因此,我需要在try catch块中.
即使我知道变量将在try或catch块上初始化,java编译器也会产生错误
The final field a may already have been assigned
这是我的代码:
public class TestClass {
private static final String a;
static {
try {
a = fn(); // ERROR
} catch (Exception e) {
a = null;
}
}
private static String fn() throws Exception {
throw new Exception("Forced exception to illustrate");
}
}
我尝试了另一种方法,直接将其声明为null,但它显示了类似的错误(在这种情况下,对我来说似乎完全是逻辑)
The final field TestClass.a cannot be assigned
public class TestClass {
private static final String a = null;
static {
try {
a = fn(); // ERROR
} catch (Exception e) {
}
}
private static String fn() throws Exception {
throw new Exception("Forced exception to illustrate");
}
}
有一个优雅的解决方案吗?
最佳答案
您可以先将值分配给局部变量,然后在try-catch块之后将其分配给最终变量:
private static final String a;
static {
String value = null;
try {
value = fn();
} catch (Exception e) {
}
a = value;
}
这确保了对最终变量的单一赋值.
点击查看更多相关文章
转载注明原文:java – 无法在try / catch中初始化静态最终变量 - 乐贴网