Ответ 1
Класс SomeClass $1. представляет собой анонимный внутренний класс
hava посмотрите на анонимный внутренний класс здесь
Если у меня есть внутренний класс, например:
public class Test
{
public class Inner
{
// code ...
}
public static void main(String[] args)
{
// code ...
}
}
Когда я его компилирую, я ожидаю, что он должен сгенерировать два файла:
Test.class
Test$Inner.class
Итак, почему я иногда вижу классные файлы, такие как SomeClass $1.class, хотя SomeClass не содержит внутренний класс с именем "1"?
Класс SomeClass $1. представляет собой анонимный внутренний класс
hava посмотрите на анонимный внутренний класс здесь
Вы также получите что-то вроде 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, если вы вызвали новый Bar(). printMe напечатал "определенный", а в каталоге компиляции вы найдете Bar1.class
этот раздел в приведенном выше коде:
Foo f = new Foo() {
public void printMe() {
System.out.println("defined");
}
};
называется анонимным внутренним классом.