2012-03-12 61 views
1

我想知道为什么我的ProgramFiles程序的“bin”文件夹中有30个ClassFiles。Eclipse:许多Class文件

为随后它们被命名为:

Testworks$1.class 
Testworks$2.class 
Testworks$3.class 
Testworks$4.class 

... 

,并具有一个Testworks.class

当我生成我Program.jar文件中的所有30 Testworks$X.class在里面复制。

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

回答

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等)

2

你确实需要它们,它们是你的代码中的匿名类。编译器将它们编译到这个命名方案中(Outer$x.class)。

0

将内部类编译为该类。

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());