以下是我使用x
的静态变量更新OuterClass
的实例变量StaticInner
的代码。我知道静态内部类不能直接引用外部类的实例变量。我使用外部类的实例来引用它的实例变量'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.
}
}
答案 0 :(得分:4)
构造函数中存在循环依赖关系,导致它们之间的递归调用
Outer(){
createInner()
}
Inner(){
createOuter()
}
这不起作用(除非你使用反射,但是这违背了目的)。
您需要构造类,以便存在线性依赖关系。我建议将外部实例传递给内部构造函数
Outer(){
inner = new Inner(this);
}
Inner(Outer o){
myouter = o;
}
答案 1 :(得分:0)
不要使用外部类实例限定“new”。这仅适用于内部类。只需像其他任何实例化嵌套类一样。
在外部类中使用静态嵌套类时,根本不需要提及外部类。