instanceof 式の右辺でクラス/インターフェース型を extends/implements せず、それを行うサブクラスもないクラス/インターフェース型がチェック対象の式にある instanceof 式を報告します。

このような式はライブラリコードをなどを意図している可能性があるものの、このようなコンストラクトは間違いである可能性があります。なぜなら、プロジェクトで宣言されているクラスのインスタンスはこの instanceof テストをパスできない可能性があるためです。

例:


  class Foo { }

  interface Bar { }
  
  class Main {
      void test(Foo f, Bar b) {
          if (f instanceof Bar) { // 問題
              System.out.println("fail");
          }
          if (b instanceof Foo) { // 問題
              System.out.println("fail");
          }
      }
  }