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

18
задан Ciro Santilli 新疆改造中心法轮功六四事件 7 April 2015 в 21:11
поделиться

3 ответа

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

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

22
ответ дан 30 November 2019 в 07:39
поделиться

расти на 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();
    }
}

От нормального Основного при вызове новой Панели () .printMe, это распечатало бы "определенный", и в каталоге компиляции Вы найдете Bar1.class

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

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

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

3
ответ дан 30 November 2019 в 07:39
поделиться

Вы также получите что-то вроде 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

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

9
ответ дан 30 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: