簡體   English   中英

Java中的靜態內部類中的stackoverflow錯誤?

[英]stackoverflow error in static inner class in Java?

這里就是我正在更新實例變量的代碼xOuterClass由靜態變量StaticInner 我知道靜態內部類不能直接引用外部類的實例變量。 我正在使用outerclass的實例來引用其實例變量“ x”並對其進行更新。 這會進入stackoverflow錯誤。 該代碼符合要求。 代碼的最后一行無法編譯,我已經注釋掉了。 我不明白那條線是什么問題。

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.
    }

}

您在構造函數中具有循環依賴關系,從而導致它們之間的遞歸調用

Outer(){
  createInner()
}

Inner(){
   createOuter()
}

這是行不通的(除非您使用反射,但這會達到目的)。

您需要構造這些類,以便存在線性依賴關系。 我建議將外部實例傳遞給內部構造函數

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

Inner(Outer o){
  myouter = o;
}

不要用外部類實例來限定“新”。 這僅適用於內部類。 就像實例化嵌套類一樣。

在外部類內部使用靜態嵌套類時,您根本不需要提及外部類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM