Eclipse:许多类文件

时间:2012-03-12 13:05:08

标签: java eclipse compiler-construction build jar

我想知道为什么我的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都被复制到内部。

我真的需要它们吗?如何排除它们?

4 个答案:

答案 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)

内部类被编译为。