将局部变量声明为 final,而不带初始值设定项,并在 if 语句中赋值
我刚刚做了一个小的代码更改,以沉默FindBugs警告,这需要将一些代码移动到匿名的内部类。为了访问某些变量,我必须将它们声明为 .所以这是更改后的代码片段:final
final File[] libPath; // libPath is final but assignment takes place later
if (libraryPath != null) {
libPath = pathToFiles(libraryPath);
} else {
libPath = new File[0];
}
这在当前 Eclipse(版本 3.7.1)中设置为 Java 6 的语言下编译得很好。但是,我很确定这在以前的版本中曾经给出错误。似乎编译器在可以确定将存在此构造时接受此构造。
我的问题是:这在Java 6中是合法的,还是由于Java 7支持的副作用被添加到eclipse 3.7.1中而起作用?我们已经在3.7.1中工作但在3.7.0中编译的泛型的某些用法中看到了这种副作用。