内部クラスは、Javaで外部クラスを使用していないと間違って何ですか?

StackOverflow https://stackoverflow.com/questions/1132930

  •  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宣言することを忘れがちであるので、それが必要とされないときにコード分析が警告を表示します。

内部クラスの全体のポイントは、それが外側のクラスへのアクセスを有することです。あなたがいないのであれば、実際にの外側のクラスを使用して、ちょうどそれ定期的に、本格的なクラスにします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top