我遇到了下面的Java代码,它起初看起来不错但从不编译:
public class UnwelcomeGuest {
public static final long GUEST_USER_ID = -1;
private static final long USER_ID;
static {
try {
USER_ID = getUserIdFromEnvironment();
} catch (IdUnavailableException e) {
USER_ID = GUEST_USER_ID;
System.out.println("Logging in as guest");
}
}
private static long getUserIdFromEnvironment()
throws IdUnavailableException {
throw new IdUnavailableException(); // Simulate an error
}
public static void main(String[] args) {
System.out.println("User ID: " + USER_ID);
}
}//Class ends here
//User defined Exception
class IdUnavailableException extends Exception {
IdUnavailableException() { }
}//Class ends here
Run Code Online (Sandbox Code Playgroud)
以下是IDE中出现的错误消息: 可能已经分配了变量USER_ID.
静态最终变量的赋值是否有问题?
das*_*ght 19
最终变量最多允许构造函数或初始化程序块中的一个赋值.这不编译的原因是Java代码分析器USER_ID在分支中看到两个看起来不相互排斥的赋值.
解决这个问题很简单:
static {
long theId;
try {
theId = getUserIdFromEnvironment();
} catch (IdUnavailableException e) {
theId = GUEST_USER_ID;
System.out.println("Logging in as guest");
}
USER_ID = theId;
}
Run Code Online (Sandbox Code Playgroud)