May*_*day 3 java static final initialization static-initializer
我正在尝试初始化静态最终变量。但是,此变量是在可能引发异常的方法中初始化的,因此,我需要在try catch块内使用。
即使我知道变量将在try或catch块上初始化,Java编译器也会产生错误
最终字段a可能已经分配
这是我的代码:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了另一种方法,直接将其声明为null,但它显示了类似的错误(在这种情况下,对我来说似乎完全合乎逻辑)
无法分配最终字段TestClass.a
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");
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一个优雅的解决方案?
您可以先将值分配给局部变量,然后final
在try
- catch
块之后将其分配给变量:
private static final String a;
static {
String value = null;
try {
value = fn();
} catch (Exception e) {
}
a = value;
}
Run Code Online (Sandbox Code Playgroud)
这样可以确保对final
变量进行一次分配。
归档时间: |
|
查看次数: |
821 次 |
最近记录: |