Eclipse で静的アナライザーを使用してコードを調べています。1 つのクラス foo には、内部クラス bar があります。次のエラーが表示されます。
JAVA0043 Inner class 'bar' does not use outer class 'foo'
なぜこれがエラーになるのですか?外側のクラスが内側のクラスを使用している限り、この情報隠蔽を有用かつ正確にするのに十分ではないでしょうか?
内部クラスは静的ではありません。
Eclipse で静的アナライザーを使用してコードを調べています。1 つのクラス foo には、内部クラス bar があります。次のエラーが表示されます。
JAVA0043 Inner class 'bar' does not use outer class 'foo'
なぜこれがエラーになるのですか?外側のクラスが内側のクラスを使用している限り、この情報隠蔽を有用かつ正確にするのに十分ではないでしょうか?
内部クラスは静的ではありません。
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;
}
}
}
内部クラスが外部クラスによってのみ使用できるが、内部クラスが外部クラスへの参照を必要としない場合は、それを作成できますprivate static
。
内側のクラスが外側のクラス以外の誰かに知られている場合、それ自体がトップレベルのクラスである可能性もあります。
外部クラスへの参照を行っていない場合は、完全な通常のクラスである可能性があります。外部クラスに依存しないため、自立できます。それが「エラー」の原因だと思います。
非静的内部クラスには、その外部クラスのインスタンスへの暗黙的な参照があります。この非表示の参照により、外部クラスでのガベージ コレクションが遅延 (または防止) され、シリアル化の問題が発生する可能性があります。したがって、非静的内部クラスは必要な場合にのみ使用してください。クラスを static として宣言するのを忘れがちなので、コード分析は不要な場合に警告を発します。
内部クラスの要点は、外部クラスにアクセスできることです。外部クラスを実際に使用していない場合は、通常の本格的なクラスにしてください。