当使用java反编译器(http://java.decompiler.free.fr/)反编译特定的jar时,我得到了一些奇怪的代码,我无法识别是什么。有人能帮我吗?代码是这样的:
Foo.access$004(Foo.this);
or this
Bar.access$006(Bar.this);
or else
Baz.access$102(Baz.this, true)
这些方法是什么access$004
, access$006
and access$102
?
创建这样的综合方法是为了支持访问内部类的私有方法。由于内部类不是初始 jvm 版本的一部分,因此访问修饰符无法真正处理这种情况。解决方案是创建额外的包可见方法,委托给私有实现。
public class Example {
private static class Inner {
private void innerMethod() { ... }
}
public void test() {
Inner inner = ...
inner.innerMethod():
}
}
编译将创建一个新方法Inner
像这样的类:
static void access$000(Inner inner) {
inner.innerMethod();
}
并替换中的调用test
像这样的方法:
Inner.access$000(inner);
静态的access$000
包是否可见,可以从外部类访问,并且在同一个包内Inner
它可以委托给私有类innerMethod
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)