0

の静的変数によってのインスタンス変数xを更新するコードを次に示します。静的内部クラスが外部クラスのインスタンス変数を直接参照できないことを理解しています。インスタンス変数 'x' を参照して更新するために、outerclass のインスタンスを使用しています。これは、stackoverflow エラーになります。コードは正常に準拠しています。コメントアウトしたコードの最後の行はコンパイルされません。その行の問題点がわかりません。OuterClassStaticInner

public class OuterClass {
    private int x = 10;
    private static int y = 15;
    private static StaticInner si=null;

    public OuterClass() {
        setStaticInner();
        this.x=si.ic.x;
    }

    public static class StaticInner {
        private static int z = 20;
        private OuterClass ic = new OuterClass();
        public void increment() {
            OuterClass.y+=z;
            z+=OuterClass.y;
            ic.x+=10;
        }
    }

    public void setStaticInner(){
        si=new StaticInner();
    }

    public static void main(String[] args){

        OuterClass ic = new OuterClass();
        ic.si.increment();
        System.out.println(ic.x);

        //OuterClass.StaticInner sb1 = ic.new StaticInner(); This line does not compile.
    }

}
4

2 に答える 2

4

コンストラクターに循環依存関係があるため、それらの間で再帰呼び出しが発生します

Outer(){
  createInner()
}

Inner(){
   createOuter()
}

これは機能しません (リフレクションを使用しない限り、それは目的を無効にします)。

線形依存関係が存在するようにクラスを構造化する必要があります。外側のインスタンスを内側のコンストラクターに渡すことをお勧めします

Outer(){
   inner = new Inner(this);
}

Inner(Outer o){
  myouter = o;
}
于 2013-11-06T20:32:59.497 に答える
0

外部クラスのインスタンスで "new" を修飾しないでください。これは内部クラスにのみ適用されます。ネストされたクラスを他のクラスと同様にインスタンス化するだけです。

外側のクラス内で静的なネストされたクラスを操作する場合、外側のクラスについて言及する必要はまったくありません。

于 2013-11-06T20:36:15.257 に答える