我正在尝试在我们正在使用的第三方框架中稍微扩展一个未记录的类。我用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);
}
}
}
我不知道如何解释“访问$ 102”这一行。 MyContainingType扩展了javax.swing.JLayeredPane。这不能为我编译,所以如何解释这个并在我的扩展类中正确转换它?
答案 0 :(得分:5)
这是一个合成访问器。
即使是内部类也无法访问其封闭类的私有成员。编译器“合成”默认(包)访问方法,以允许内部类使用封闭类的私有字段。
您应该能够查看封闭的类来确定access$102
正在做什么。
使用-c选项的javap
工具也非常有用。
答案 1 :(得分:0)
AFAIK jd-gui仍然在改进内部课程。直到版本0.2.9我根本无法反编译内部类。现在它工作得更好,我真的很喜欢下一个版本!
'access $ 102'对我来说就像是一个静态方法的占位符。您应该能够在MyContainingType中找到具有类似签名的内容。