[英]stackoverflow error in static inner class in Java?
這里就是我正在更新實例變量的代碼x
的OuterClass
由靜態變量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.