— Привет, Амиго!
Как ты уже знаешь, у анонимных внутренних классов не может быть конструктора.
— Ага. Это очень неудобно. Конструктор – это очень нужная вещь.
— Как говорится, если нельзя, но очень хочется, то можно.
Вспомни, у статических переменных нет статического конструктора, но есть статический инициализатор – 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;
}
}
В этот раз я выделила красным цветом код анонимного внутреннего класса, а фиолетовым – его инициализатор – или, фактически, конструктор. Тело «конструктора» есть, а заголовка метода – нет:
Ожидание | Реальность |
---|---|
|
|
Ты можешь объявлять переменные внутри такого класса и инициализировать их внутри инициализатора.
— Отлично, теперь ограничений значительно меньше.
— На этом мы наше знакомство с внутренними классами и закончим. Надеюсь, тебе понравилось.
— Очень. Лекции Ким, Риши, а особенно твои, Элли, были просто бесподобными.
— Льстец! Продолжай…
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ