ネストしたクラスから外部クラスの非定数 private メンバーへの参照を報告します。 このような参照に対し、javac は package-private な合成アクセサーメソッドを生成します。その結果、安全性が損なわれる可能性があります。private に見えるメンバーが、実際にはパッケージ全体からアクセス可能であるためです。

ネストしたクラスとその外部クラスは個別のクラスファイルにコンパイルされます。 Java 仮想マシンは通常、あるクラスから別クラスの private フィールドとメソッドへのアクセスを禁止しています。 ネストしたクラスから外部クラスの private メンバーにアクセスできるようにするため、javac はpackage-private な合成アクセサーメソッドを作成します。

代わりに private メンバーを package-private にすることで、実際のアクセシビリティが明確になります。 また、メモリ消費量が若干抑えられるため、リソースの使用が制限されている環境でパフォーマンスが向上する可能性があります。

このインスペクションは、プロジェクトまたはモジュールの言語レベルが 10 以下の場合にのみ報告します。 ネストベースのアクセス制御 (JEP 181) により、Java 11 以降ではアクセサーメソッドは生成されなくなりました。

例:


  class Outer {
    private void x() {}

    class Inner {
      void y() {
        x();
      }
    }
  }

クイックフィックス適用後:


  class Outer {
    void x() {}

    class Inner {
      void y() {
        x();
      }
    }
  }