报告对声明为 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 并且为它们重新赋值会导致编译错误。