什么是Java中的“内部类仿真”?

时间:2010-12-18 04:36:16

标签: java eclipse eclipse-jdt emulation

刚刚发现这一点,同时阅读 eclipse JDT 的文档:

  

IMethodBinding.getParameterTypes() :. 。 。   注意:结果不包括内部类仿真引入的合成参数。

我在JLS中找不到任何对内部类仿真的引用......任何人都知道这个仿真是什么?举一个例子,也会有所帮助。 :)

2 个答案:

答案 0 :(得分:4)

我认为Eclipse文档编写器的术语有点松散。就JLS而言,内部类是内部类,不需要模拟。

然而,内部类通过典型的JVM实现实现的方式有点棘手,这就是合成构造函数参数进入等式的地方。发生了什么是JVM实现类是否相同,无论它们是否嵌套。没有用于引用封闭类中的变量的特殊字节码,因此编译器会生成通过合成属性获取它们的代码。

可以在最初的Sun Java 1.1 Inner Classes Specification.

中找到更多详细信息

答案 1 :(得分:2)

我怀疑“内部类仿真”是指编译器如何为内部类生成字节代码 虚拟机级别没有内部类支持(至少在它们被引入时)。编译内部类时,编译器必须为 normal 类生成字节代码。添加对外部类实例的引用,例如:

public class Outer {

    class Inner {
        @Override
        public String toString() {
            return "Inner";
        }
    }
}

将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";
    }
}