2013-06-02 3 views
4

У меня есть проект Java, работающий в Eclipse с основным исполняемым файлом, который называется GreatPlaces.java. В моей папке /bin я бы предположил, что у меня есть только один файл CLASS с именем GreatPlaces.class. Тем не менее, у меня их пара, кроме GreatPlaces.class У меня также есть GreatPlaces$1.class, GreatPlaces$2.class ... GreatPlaces$22.class. Может ли кто-нибудь объяснить мне это? Благодарю.Почему у меня так много файлов CLASS в папке bin?

+2

Вы, вероятно, используете [анонимные классы] (http://docs.oracle.com/javase/ tutorial/java/javaOO/anonymousclasses.html) в вашем коде. – Pshemo

+0

как я могу это узнать? И, кроме того, это как-то вредно для окончательного выпуска проекта? – MichalB

+0

Взгляните на ссылку в моем комментарии. Обычно анонимные классы создаются с помощью 'new SomeClassOrInterface() {дополнительная реализация для SomeClassOrInterface};' – Pshemo

ответ

4

Внутренние классы если таковые присутствуют в вашем классе будет обобщена и файл класса будет ClassName$InnerClassName. Включение анонимных внутренних классов будет отображаться как числа.

Пример:

public class TestInnerOuterClass { 
    class TestInnerChild{ 

    } 

    Serializable annoymousTest = new Serializable() { 
    }; 
} 

Классы, которые будут сгенерированные являются:

  1. TestInnerOuterClass.class
  2. TestInnerOuterClass $ TestInnerChild.class
  3. TestInnerOuterCasss $ 1.class
4

Знак доллара используется компилятором для внутренних классов.

$ знак представляет собой внутренние классы. Если у него есть number после $, то это анонимный внутренний класс. Если он имеет name после $, то это только внутренний класс.

Так что в вашем casese они представляют annonymouse внутренние классы

2

Эти файлы классов соответствуют анонимным внутренним классам, которые вы используете в программе.

Вот пример обработчика событий, который будет скомпилирован в файл .class своих собственных:

button.addActionLister(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { .... } 
});