【发布时间】:2012-11-28 11:33:47
【问题描述】:
因为我相信这是一种很好的编程习惯,所以我将所有(本地或实例)变量设为final,如果它们打算只编写一次的话。
但是,我注意到当变量赋值可能引发异常时,您不能将所述变量设为 final:
final int x;
try {
x = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
x = 42; // Compiler error: The final local variable x may already have been assigned
}
有没有办法在不使用临时变量的情况下做到这一点? (或者这不是最终修饰符的正确位置吗?)
【问题讨论】:
-
我怀疑你可以在没有临时变量的情况下做到这一点。
-
final int x = makeX();绝对。 (函数中的try-catch) -
令人震惊的是 JDK still doesn't have a
tryParse. -
说清楚一点,编译器错误是不对的,不是吗?在给定的示例中,没有任何情况可以将 x 分配两次。
-
@jaco0646,当 try 块中有多行可能发生异常时,编译器通常要求很多。不过,最好有一个例外情况用于此目的,检测赋值何时是 try 中的最后一条语句。