我正在尝试在我们使用的第三方框架中稍微扩展一个未记录的类。我用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工具也非常有用。

10-06 13:35