undefined

Конструкторы/переменные анонимных иннер классов, final

Java Multithreading
4 уровень , 8 лекция
Открыта

— Привет, Амиго!

Как ты уже знаешь, у анонимных внутренних классов не может быть конструктора.

— Ага. Это очень неудобно. Конструктор – это очень нужная вещь.

— Как говорится, если нельзя, но очень хочется, то можно.

Вспомни, у статических переменных нет статического конструктора, но есть статический инициализатор – 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;
 }
}

В этот раз я выделила красным цветом код анонимного внутреннего класса, а фиолетовым – его инициализатор – или, фактически, конструктор. Тело «конструктора» есть, а заголовка метода – нет:

Ожидание Реальность
class Car
{
int policeNumber;
 Car(){
  policeNumber = number;
 }
}
class Car
{
int policeNumber;
{
policeNumber = number;
}
}

Ты можешь объявлять переменные внутри такого класса и инициализировать их внутри инициализатора.

— Отлично, теперь ограничений значительно меньше.

— На этом мы наше знакомство с внутренними классами и закончим. Надеюсь, тебе понравилось.

— Очень. Лекции Ким, Риши, а особенно твои, Элли, были просто бесподобными.

— Льстец! Продолжай…

Комментарии (61)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Stepan Efimov 41 уровень, Санкт-Петербург
18 апреля 2021
А почему нельзя использовать конструктор в внутренних анонимных классах?
Серж 32 уровень, Омск
15 апреля 2021
главное, что нужно вынести из этой лекции перед решение след. задач конструктора в анонимном классе нет, но есть блок инициализации { //blabla }
Евгений 37 уровень, Коряжма
14 марта 2021
Свихнуться можно от этих скобок))
Даниил Александрович 31 уровень, Тамбов
5 марта 2021
и смысл этих внутренних хитрых классов, код совсем не читаемым становится. сделано по принципу абы как на один раз лижбы задачу сдать.
Евгений Беспалов 41 уровень, Chernihiv
7 января 2021
предпоследняя и последняя строка лекции - перепутаны цвета
DZ 35 уровень
8 ноября 2020

— Льстец! Продолжай…
Вспоминается сразу ситуация в переполненном автобусе, рассказанная одним из классиков юмора: - мужчина, уберите от меня свои руки - считаю до миллиона ...
валидатор 31 уровень
19 октября 2020
Очень интересно это было. Жаль что не особо понятно. Думаю на реальном проекте закрепится и придет полное понимание необходимости внутренних классов.
Koval 37 уровень, Брест
5 марта 2020
Вспомни, у статических переменных нет статического конструктора, но есть статический инициализатор – static-блок. Объясните плиз
Артём 41 уровень
19 декабря 2019
ясно, понятно, продолжаем..
Дмитрий 28 уровень
9 октября 2019
Скобки эти... вырви глаз просто. Напишите в поддержку, кто не равнодушен. Пускай в принятой конвенции оформят. Может повлияем все вместе и исправят наконец эту порноту.