連鎖している if-else ステートメントで、どの条件も instanceof 式またはクラスの等価式 (String.class との比較など) になっているものを報告します。 このような構文がある場合、一般的にはこのような型ベースの振り分けを明示的な連鎖する型テストではなくポリモーフィックなメソッド呼び出しで行うことを要求するオブジェクト指向設計に失敗しています。

例:


  double getArea(Shape shape) {
    // 警告: 抽象化に失敗しています。
    // shape インターフェースの抽象メソッドである
    // getArea() を宣言して、すべての継承先で
    // 実装することをお勧めします。
    if (shape instanceof Point) {
      return 0;
    }
    if (shape instanceof Circle) {
      return Math.PI *
        Math.pow(((Circle) shape).radius(), 2);
    }
    if (shape instanceof Rectangle) {
      return ((Rectangle) shape).width() *
        ((Rectangle) shape).height();
    }
    throw new IllegalArgumentException();
  }

ライブラリクラスの instanceof 式を無視するには、以下のチェックボックスを使用します。