2012-03-12 4 views
1

Я хотел бы знать, почему я получил 30 ClassFiles в папке «bin» для моей программы Program.java.Eclipse: много файлов классов

Они названы как следует:

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..cc)

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

Смежные вопросы