— Привет, Амиго!
Как ты уже знаешь, у анонимных внутренних классов не может быть конструктора.
— Ага. Это очень неудобно. Конструктор – это очень нужная вещь.
— Как говорится, если нельзя, но очень хочется, то можно.
Вспомни, у статических переменных нет статического конструктора, но есть статический инициализатор – static-блок.
— Ага, я помню.
— Вот точно такой же инициализатор, только не статик, есть у анонимных внутренних классов:
class Car {
public ArrayList<Car> createPoliceCars(int count) { ArrayList<Car> result = new ArrayList<Car>(); for(int i=0; i<count; i++) { final int number = i; result.add(new Car() { int policeNumber; { policeNumber = number; } }); } return result; }
}
В этот раз я выделила красным цветом код анонимного внутреннего класса, а фиолетовым – его инициализатор – или, фактически, конструктор. Тело «конструктора» есть, а заголовка метода – нет:
| Ожидание | Реальность |
|---|---|
|
|
Ты можешь объявлять переменные внутри такого класса и инициализировать их внутри инициализатора.
— Отлично, теперь ограничений значительно меньше.
— На этом мы наше знакомство с внутренними классами и закончим. Надеюсь, тебе понравилось.
— Очень. Лекции Ким, Риши, а особенно твои, Элли, были просто бесподобными.
— Льстец! Продолжай…
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ