内部クラスは、Javaで外部クラスを使用していないと間違って何ですか?
-
16-09-2019 - |
質問
私は自分のコードを調べるためにEclipseで静的アナライザを使用しています。一つのクラスは、fooが、内部クラス、バーがあります。私は、次のエラーを取得しています:
JAVA0043 Inner class 'bar' does not use outer class 'foo'
これはなぜエラーでしょうか?外側のクラスは内部クラスを使用している限り、この情報が有用と正しい隠れ作ることは十分ではないのですか?
内部クラスは静的ではありません。
解決
、その後、あなたはそれがprivate static
作ることができます。
、それは同様にそれ自体でトップレベルのクラスであるかもしれない。
他のヒント
はhref="http://www.enerjy.com/explorer/help/rules/JAVA0043.html" rel="nofollow noreferrer"> 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;
}
}
}
これは、読みやすさとメンテナンスを強化する二つのクラス間の依存関係を、減らします。// Correct
class Log {
static class Position {
private int line;
private int column;
Position(int line, int column) {
this.line = line;
this.column = column;
}
}
}
それは外側のクラスへの参照を作っていない場合、それは同様に、フルに、通常のクラスかもしれません。それは外側のクラスに依存しないので、それはそれ自身の上に立つことができます。私はそれが「エラー」の理由だと思う。
非静的内部クラスは、その外側のクラスのインスタンスへの暗黙的な参照を有します。この隠された参照は、遅延(あるいは予防)ガベージコレクションを外部クラスにして直列化の問題を作成することができます。あなたがそれらを必要とするときに、あなたは唯一の非静的な内部クラスを使用する必要があります。それはクラスがstatic宣言することを忘れがちであるので、それが必要とされないときにコード分析が警告を表示します。
内部クラスの全体のポイントは、それが外側のクラスへのアクセスを有することです。あなたがいないのであれば、実際にをの外側のクラスを使用して、ちょうどそれ定期的に、本格的なクラスにします。