"静态合成"是什么意思?

Leg*_*end 25 java bytecode disassembly java-synthetic-methods

我正在查看从Java字节码获取的一些反汇编代码.我看到一些声明如下:

.method static synthetic access$0()Lcom/package/Sample;
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚什么syntheticaccess$0意味.有人可以帮我理解这部分吗?

ILM*_*tan 32

在java语言中,内部类可以访问其封闭类的私有成员.但是,在Java字节码中,内部类的概念不存在,并且私有成员不可访问.要解决此问题,编译器会在外部类中创建合成访问器方法.我相信这就是你在这里看到的.access$0只是方法的名称.我不知道是什么,如果有的话synthetic.它可能只是隐藏其他编译器的方法以确保封装.


Joh*_*erg 27

合成油田,(2)

编译器创建的字段,该字段的本地内部类链接到一个块的局部变量或引用类型参数.

又见 The JavaTM Virtual Machine Specification (§4.7.6)Java中合成类.