I am trying to initialize a static final variable. However, this variable is initialized in a method which can throw exception, therefor, I need to have inside a try catch block.
Even if I know that variable will be either initialized on try or on catch block, java compiler produces an error
The final field a may already have been assigned
This is my code:
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");
}
}
I tried another approach, declaring it as null directly, but it shows a similar error (In this case, it seems totally logic for me)
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");
}
}
Is there an elegant solution for this?
You can assign the value to a local variable first, and then assign it to the final
variable after the try
-catch
block:
private static final String a;
static {
String value = null;
try {
value = fn();
} catch (Exception e) {
}
a = value;
}
This ensures a single assignment to the final
variable.