5

Eclipse で静的アナライザーを使用してコードを調べています。1 つのクラス foo には、内部クラス bar があります。次のエラーが表示されます。

JAVA0043 Inner class 'bar' does not use outer class 'foo'

なぜこれがエラーになるのですか?外側のクラスが内側のクラスを使用している限り、この情報隠蔽を有用かつ正確にするのに十分ではないでしょうか?

内部クラスは静的ではありません。

4

5 に答える 5

11

Enerjyエラーのように見えます:

// Incorrect
class Log {
  // Position never uses the enclosing Log instance,
  // so it should be static
  class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}

外部クラスのインスタンス変数またはメソッドを使用しないネストされたクラスは、静的として宣言できます
これにより、2つのクラス間の依存関係が減り、読みやすさとメンテナンスが向上します。

// Correct
class Log {
  static class Position {
    private int line;
    private int column;
    Position(int line, int column) {
      this.line = line;
      this.column = column;
    }
  }
}
于 2009-07-15T18:07:02.320 に答える
7

内部クラスが外部クラスによってのみ使用できるが、内部クラスが外部クラスへの参照を必要としない場合は、それを作成できますprivate static

内側のクラスが外側のクラス以外の誰かに知られている場合、それ自体がトップレベルのクラスである可能性もあります。

于 2009-07-15T18:08:10.103 に答える
7

外部クラスへの参照を行っていない場合は、完全な通常のクラスである可能性があります。外部クラスに依存しないため、自立できます。それが「エラー」の原因だと思います。

于 2009-07-15T18:02:40.893 に答える
5

非静的内部クラスには、その外部クラスのインスタンスへの暗黙的な参照があります。この非表示の参照により、外部クラスでのガベージ コレクションが遅延 (または防止) され、シリアル化の問題が発生する可能性があります。したがって、非静的内部クラスは必要な場合にのみ使用してください。クラスを static として宣言するのを忘れがちなので、コード分析は不要な場合に警告を発します。

于 2009-07-15T18:38:54.287 に答える
1

内部クラスの要点は、外部クラスにアクセスできることです。外部クラスを実際に使用していない場合は、通常の本格的なクラスにしてください。

于 2009-07-15T18:02:59.100 に答える