我想知道为什么我的Program.java程序的“bin”文件夹中有30个ClassFiles。
他们的名字如下:
Testworks$1.class
Testworks$2.class
Testworks$3.class
Testworks$4.class
...
并且有一个Testworks.class
当我生成我的Program.jar文件时,所有30 Testworks$X.class
都被复制到内部。
我真的需要它们吗?如何排除它们?
答案 0 :(得分:4)
这些类是匿名内部类。如果您已经使用过GUI编程,那么您可能已经注意到了它们。为事件创建侦听器时,可能会执行以下操作: -
Button okBtn = new Button("Ok");
okBtn.addActionListener(new ActionListener(){//this is an anonymous inner class
public void actionPerformed(ActionEvent ae){
//your code here
}
...
...
});
此内部类没有显式名称,因此编译器使用约定OuterClass $ x.class命名它。 x由内部类的数量(例如,1,2 ......等)替换。
答案 1 :(得分:2)
您确实需要它们,它们是您的代码中的匿名类。编译器将它们编译为此命名方案(Outer$x.class
)。
答案 2 :(得分:1)
这取决于您编写的代码。如果你有类似下面的内容,它将生成这些$
类文件。
List<Person> persons = ...
Collections.sort(persons, new Comparator<Person>() {
@Override
public int compareTo(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
});
如果您不想出于任何原因看到$
文件,只需在单独的类中声明匿名比较器。
public class PersonComparator implements Comparator<Person> {
@Override
public int compareTo(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
并将其用作:Collections.sort(persons, new PersonComparator());
答案 3 :(得分:0)
内部类被编译为。