刚刚发现这一点,同时阅读eclipse JDT的文档:
IMethodBinding.getParameterTypes()
: . . . 注意:结果不包括内部类 emulation引入的合成参数。
我在 JLS 中找不到对内部类仿真的任何引用......有人知道这个仿真是什么吗?举个例子,也会有所帮助。:)
刚刚发现这一点,同时阅读eclipse JDT的文档:
IMethodBinding.getParameterTypes()
: . . . 注意:结果不包括内部类 emulation引入的合成参数。
我在 JLS 中找不到对内部类仿真的任何引用......有人知道这个仿真是什么吗?举个例子,也会有所帮助。:)
我认为 Eclipse 文档作者的术语有点松散。就 JLS 而言,内部类是内部类,不需要模拟。
但是,内部类由典型的 JVM实现的方式有一点棘手,这就是合成构造函数参数进入等式的地方。发生的事情是,无论它们是否嵌套,JVM 都以相同的方式实现类。没有用于引用封闭类中的变量的特殊字节码,因此编译器生成通过合成属性获取它们的代码。
更多细节可以在原始的 Sun Java 1.1 Inner Classes Specification 中找到。
我怀疑“内部类仿真”是编译器为内部类生成字节码的方式。
虚拟机级别没有内部类支持(至少在引入它们时)。编译内部类时,编译器必须像普通类一样生成字节码。添加对外部类实例的引用,例如:
public class Outer {
class Inner {
@Override
public String toString() {
return "Inner";
}
}
}
内部类被编译为类似于:
class Outer$Inner {
final Outer this$0; // the instance of the outer class
Outer$Inner(Outer outer) {
super();
this$0 = outer;
}
public String toString() {
return "Inner";
}
}