我正在尝试在我们使用的第三方框架中稍微扩展一个未记录的类。我用jd-gui反编译了.class文件,然后看到一个定义如下的内部类:
private class DeactivateAction extends AbstractAction {
public DeactivateAction() {
super("Deactivate");
}
public void actionPerformed(ActionEvent paramActionEvent) {
if (MyContainingType.this.someBoolean) {
MyContainingType.access$102(MyContainingType.this, false);
MyContainingType.this.add(MyContainingType.this.interceptor);
}
}
}
我不确定如何在此处解释“ access $ 102”行。 MyContainingType扩展了javax.swing.JLayeredPane。这对我来说不是编译的,那么如何在扩展类中对此进行解释并正确转换呢?
最佳答案
那是一个合成访问器。
即使是内部类,实际上也无法访问其所在类的私有成员。编译器“综合”默认(包)访问方法,以允许内部类与封闭类的私有字段一起使用。
您应该能够查看封闭的类以弄清access$102
在做什么。
带有-c选项的javap
工具也非常有用。