在使用内部类编译代码时,为什么会创建奇怪的输出文件?

时间:2014-03-03 03:52:55

标签: java inner-classes

我编译了这段代码然后,TestInner$1.class出现了。

我知道~~~$1.class表示该文件包含“匿名类。

但是我不明白这个类文件的原因。我想知道原因。

这是代码。

public class TestInner {
    private static class Inner { }

    public static void main(String[] args){
         new Inner();
    }
}

我尝试将其他版本移除“私有”标识符,如下所示。

public class TestInner {
    static class Inner { }

    public static void main(String[] args){
         new Inner();
    }
}

我想过这段代码也会生成TestInner$1.class个文件。

但是它没有创建文件。

此外,添加 Constructor 的以下代码也未生成TestInner$1.class

public class TestInner {
    private static class Inner {
        Inner(){ }
    }

    public static void main(String[] args){
         new Inner();
    }
}

我不知道,有人可以帮助我吗?

修改

我找到了同样的问题并且解决了。谢谢你的帮助。

Why is an anonymous inner class containing nothing generated from this code?

1 个答案:

答案 0 :(得分:4)

您的所有示例都没有匿名内部类。它们都不会生成名为TestInner$1.class的文件。所有这些都将生成一个名为TestInner$Inner.class的文件。

以下示例显示了一个匿名内部类,而生成TestInner$1.class

public class TestInner {
    public static void main(String[] args){
         new Object() {
             @Override public String toString () {
                 return "ninja";
             }
         };
    }
}

我不确定你的TestInner$1.class来自哪里,但我猜这是你以前的实验遗留下来的。


更新1:我可以确认没有使用Eclipse我得到TestInner$1.class(除了TestInner$Inner.class - 产生了3个文件)第一个例子但不是最后两个,就像你看到的一样。当我发现原因时会更新。通过Eclipse编译时,永远不会生成TestInner$1.class


更新2:OP在Why is an anonymous inner class containing nothing generated from this code?中找到了解决方案。