catch
块参数的变量的赋值。
更改 catch
块参数很容易引起混淆,不建议使用。
快速修复会添加新变量的声明。
示例:
void processFile(String fileName) throws Exception {
try {
doProcessFile(fileName);
}
catch(Exception ex) {
if (ex instanceof UncheckedIOException) {
// 警告:catch 块参数被重新赋值
ex = ((UncheckedIOException) ex).getCause();
}
throw ex;
}
}
在应用快速修复后:
catch(Exception ex) {
Exception unwrapped = ex;
if (unwrapped instanceof UncheckedIOException) {
unwrapped = ((UncheckedIOException)
unwrapped).getCause();
}
throw unwrapped;
}
不报告多 catch 块的参数,因为此类参数为隐式 final
并且为它们重新赋值会导致编译错误。