0

私はこのようなコードを持っています。私はメソッド内の静的クラスの変数にアクセスする必要がmysampleあります の新しいオブジェクトを作成してアクセスしようとしましたが、取得しています。InnerClassgetInnerS()NestedClassInnerClassjava.lang.StackOverflowError

public class NestedClass{
    private String outer = "Outer Class"; //NestedClass instance variable
    NestedClass.InnerClass innerClass = new NestedClass.InnerClass();

    void getOuterS(){
        System.out.println(outer); 
    }
    void getInnerS(){
        System.out.println(innerClass.mysample);
    }
    static class InnerClass{
        private String mysample = "Inner Class"; //InnerClass instance variable,
        NestedClass a = new NestedClass();
        void getIn(){
            System.out.println(mysample);
        }
        void getOut(){
            System.out.println(a.outer);
        }
    }
    public static void main(String[] args){
         NestedClass nestedClass = new NestedClass();
         NestedClass.InnerClass nestedInner = new NestedClass.InnerClass(); 
         nestedClass.getOuterS();
         nestedClass.getInnerS();
         nestedInner.getIn();
         nestedInner.getOut();
    }
}
4

3 に答える 3

3

InnerClassコンストラクターで:

NestedClass a = new NestedClass(); 

したがって、 newNestedClassを作成すると、 newInnerClassが作成され、それ自体が独自の を作成NestedClassし、対応するInnerClass.... スタックオーバーフローが発生するのも不思議ではありません。

囲んでいるクラスにアクセスする場合は、(InnerClassメソッド内)を使用する必要があります。

NestedClass.this   
于 2012-09-08T15:25:32.063 に答える
1
NestedClass a = new NestedClass();

静的 InnerClass クラスでは、NestedClass のインスタンスが作成されます。InnerClass は静的であるため、これはループです。

InnerClass は静的である必要はありません。これは機能するはずです

public class NestedClass {
private String outer = "Outer Class"; //NestedClass instance variable
NestedClass.InnerClass innerClass = new NestedClass.InnerClass();

void getOuterS(){
    System.out.println(outer); 
}
void getInnerS(){
    System.out.println(innerClass.mysample);
}
class InnerClass{
    private String mysample = "Inner Class"; //InnerClass instance variable,
    NestedClass a = NestedClass.this;
    void getIn(){
        System.out.println(mysample);
    }
    void getOut(){
        System.out.println(a.outer);
    }
}
public static void main(String[] args){
     NestedClass nestedClass = new NestedClass();
     NestedClass.InnerClass nestedInner = nestedClass.innerClass; 
     nestedClass.getOuterS();
     nestedClass.getInnerS();
     nestedInner.getIn();
     nestedInner.getOut();
}


}
于 2012-09-08T15:26:23.173 に答える