我一直在使用Eclipse作为我的开发IDE。 我还用它来我的应用程序导出到一个.jar文件。 当我在.jar文件看我的班,我的几个类包含类,一个美元符号,然后一个数字的名称。 例:
- 查找$ 1.class
- 查找$ 2.class
- 查找$ 3.class
- Find.class
我发现它这样做的更大类。 这是因为类弄这么大,它编译成多个类? 我一派,并期待在多个论坛,并搜索Java文档,但没有发现任何东西,甚至关系到它。 可能有人解释一下吗?
我一直在使用Eclipse作为我的开发IDE。 我还用它来我的应用程序导出到一个.jar文件。 当我在.jar文件看我的班,我的几个类包含类,一个美元符号,然后一个数字的名称。 例:
我发现它这样做的更大类。 这是因为类弄这么大,它编译成多个类? 我一派,并期待在多个论坛,并搜索Java文档,但没有发现任何东西,甚至关系到它。 可能有人解释一下吗?
内部类,如果存在的任何类,将被编译和类文件将ClassName$InnerClassName
。 在匿名内部类的情况下,它会显示为数字。 类(Java代码的)的大小不会导致产生多个类的。
例如给定的这一段代码:
public class TestInnerOuterClass {
class TestInnerChild{
}
Serializable annoymousTest = new Serializable() {
};
}
这将生成的类将是:
TestInnerOuterClass.class
TestInnerOuterClass$TestInnerChild.class
TestInnerOuterCasss$1.class
更新:
使用匿名类不被认为是不好的做法,它只是取决于使用情况。
检查这对SO讨论
这是因为你有这样大的类中的匿名类。 他们开始使用此命名约定编译。
见匿名类难题
除了由@mprabhat提出的上述情况,其他情况下可能是:
这些案件是我在罐子.class文件检查的推导。
为了回答您的评论的都是匿名类坏。 他们是最绝对不是。 认为这是一个动作监听分配给一个JButton:
JButton button = new JButton(...);
button.addActionListener(new ActionListener() { ... });
或本由“名称”属性做一个区分大小写的排序
Collections.sort( array, new Comparator<Foo>() {
public int compare(Foo f1, Foo f2) {
return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase());
}
});
您还可以看到很多的Runnable和赎回进行匿名类。