EXC.BROADTHROWS

メソッドは、抽象レベルに適した例外をスローする必要があります。メソッドが、Exception や Throwable のように概略的過ぎる例外をスローする場合、呼び出し側が正しくエラーを処理し、適切なエラー回復を実行することは困難です。

脆弱性とリスク

メソッドが概略的過ぎる例外をスローする場合、呼び出し側は、適切な処置ができるように、発生した問題の種類を調査する必要があります。また、メソッドコードが変更され、新規の例外が導入された場合には、すべての呼び出し側に適切な処理を迫るのはさらに困難です。

軽減と防止

メソッドは、抽象レベルに適した例外をスローする必要があります。必要に応じて、低レベルの例外を高レベルの例外にラップしてください。

例 1

コピー
    public void processFile(String fileName) throws Exception {
      InputStream is = new FileInputStream(fileName);
      // do something
    }
    public int calculateSum(Collection data) throws Throwable {
      int sum = 0;
      for (Iterator it = data.iterator(); it.hasNext();) {
        String element = (String) it.next();
        int i = Integer.parseInt(element);
        sum += i;
      }
      return sum;
    }

EXC.BROADTHROWS が 15 行目のメソッド 'processFile' の宣言に対して報告されています。'processFile' メソッドは、汎用的な例外 'java.lang.Exception' をスローします。

EXC.BROADTHROWS が 19 行目のメソッド 'calculateSum' の宣言に対して報告されています。'calculateSum' メソッドは、汎用的な例外 'java.lang.Throwable' をスローします。