2

我正在尝试在我们正在使用的第三方框架中稍微扩展一个未记录的类。我用 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。这不会为我编译,所以我如何解释它并在我的扩展类中正确转换它?

4

2 回答 2

5

那是一个合成访问器。

即使是内部类也不能真正访问其封闭类的私有成员。编译器“合成”默认(包)访问方法以允许内部类使用封闭类的私有字段。

您应该能够查看封闭类以弄清楚在access$102做什么。

javap工具带有 -c 选项也非常有用。

于 2009-05-15T21:16:44.830 回答
0

AFAIK jd-gui 仍在改进内部类。在 0.2.9 版之前,我根本无法反编译内部类。现在它工作得更好了,我真的很期待下一个版本!

'access$102' 在我看来就像一个静态方法的占位符。您应该能够在 MyContainingType 中找到具有类似签名的内容。

于 2009-05-15T21:45:57.253 回答