Почему код Java с внутренним классом генерирует третий файл SomeClass$1.class?

Если у меня есть внутренний класс, вот так:

public class Test
{
    public class Inner
    {
        // code ...
    }

    public static void main(String[] args)
    {
        // code ...
    }
}

Когда я скомпилирую его, я ожидаю, что он должен сгенерировать два файла:

Test.class
Test$Inner.class

Так почему я иногда вижу файлы классов, такие как SomeClass$1.class, хотя SomeClass не содержит внутреннего класса с именем "1"?

3 ответа

Решение

SomeClass$1.class представляет анонимный внутренний класс

хавай взгляд на анонимный раздел внутреннего класса здесь

Вы также получите что-то вроде SomeClass$1.class если ваш класс содержит закрытый внутренний класс (не анонимный), но вы создаете его экземпляр в некоторый момент в родительском классе.

Например:

public class Person {

    private class Brain{
        void ponderLife() {
            System.out.println("The meaning of life is...");
        }
    }

    Person() {
        Brain b = new Brain();
        b.ponderLife();
    }
}

Это даст:

Person.class
Person$Brain.class
Person$1.class

Лично я думаю, что это немного легче читать, чем типичный анонимный класс, особенно когда реализуется простой интерфейс или абстрактный класс, который служит только для передачи в другой локальный объект.

Построить на hhafez: SomeClass$1.class представляет анонимные внутренние классы. Примером такого класса будет

public class Foo{
  public void printMe(){
    System.out.println("redefine me!");
  }
}


public class Bar {
    public void printMe() {
    Foo f = new Foo() {
        public void printMe() {
        System.out.println("defined");
        }
    };
    f.printMe();
    }
}

Из обычного Main, если вы вызвали new Bar(). PrintMe, он напечатал бы "определенные" и в каталоге компиляции вы найдете Bar1.class

этот раздел в приведенном выше коде:

    Foo f = new Foo() {
        public void printMe() {
        System.out.println("defined");
        }
    };

называется анонимным внутренним классом.

Другие вопросы по тегам