我在内部类中创建了一个内部类:
public class EnclosingClass {
public class InnerClass {
private EnclosingClass getEnclosing() {
return EnclosingClass.this;
}
public class InnerInnerClass {
private InnerClass getEnclosing() {
return InnerClass.this;
}
private EnclosingClass getEnclosingOfEnclosing() {
return EnclosingClass.this;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶java允许InnerInnerClass
直接访问EnclosingClass
.这个代码是如何在Java内部实现的?
在InnerInnerClass
保持两个指针(一个在InnerClass
和其他的EnclosingClass
)或InnerInnerClass访问EnclosingClass
过InnerClass
?
Jon*_*eet 11
你只需要用javap反汇编生成的类来看看发生了什么:
private EnclosingClass getEnclosingOfEnclosing();
Code:
0: aload_0
1: getfield #1 // Field this$1:LEnclosingClass$InnerClass;
4: getfield #3 // Field EnclosingClass$InnerClass.this$0:LEnclosingClass;
7: areturn
Run Code Online (Sandbox Code Playgroud)
首先它获取直接封闭类的实例,然后从中获取"顶级"封闭类.