Jon*_*ley 8 java decompiling bytecode
当使用java反编译器(http://java.decompiler.free.fr/)反编译一个特定的jar时,我得到了一些奇怪的代码,我无法识别它是什么.有人能帮我吗?代码是这样的:
Foo.access$004(Foo.this);
Run Code Online (Sandbox Code Playgroud)
或这个
Bar.access$006(Bar.this);
Run Code Online (Sandbox Code Playgroud)
要不然
Baz.access$102(Baz.this, true)
Run Code Online (Sandbox Code Playgroud)
这些方法是什么access$004,access$006并且access$102?
Jör*_*ann 15
这样的合成方法被创建来支持内部类的私有方法的访问.由于内部类不是初始jvm版本的一部分,因此访问修饰符无法真正处理这种情况.解决方案是创建委托给私有实现的其他包可见方法.
public class Example {
private static class Inner {
private void innerMethod() { ... }
}
public void test() {
Inner inner = ...
inner.innerMethod():
}
}
Run Code Online (Sandbox Code Playgroud)
编译将创建一个Inner类的新方法,如下所示:
static void access$000(Inner inner) {
inner.innerMethod();
}
Run Code Online (Sandbox Code Playgroud)
并在test方法中替换调用,如下所示:
Inner.access$000(inner);
Run Code Online (Sandbox Code Playgroud)
static access$000是包可见的,因此可以从外部类访问,并且在同一个Inner类中,它可以委托给private innerMethod.
| 归档时间: |
|
| 查看次数: |
4177 次 |
| 最近记录: |