Java “Кэширует” анонимные классы?

Рассмотрите следующий код:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
  • Как Java будет рассматривать класс currentList?
  • Это будет считать это другим классом для каждого из 200 объектов?
  • Это будет хит производительности даже после того, как первый объект будет создан?
  • Это кэширует его так или иначе?

Мне просто любопытно :)

10
задан Basit Anwer 14 September 2015 в 13:11
поделиться

2 ответа

ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};

создает новый экземпляр анонимного класса каждый раз через ваш цикл, он не переопределяет или перезагружает класс каждый раз. Класс определяется один раз (при компиляционном времени) и загружается один раз (во время выполнения).

Не существует значительного использования производительности от использования анонимных классов.

15
ответ дан 3 December 2019 в 15:06
поделиться

Компилятор собирается преобразовать любой анонимный класс в именованный внутренний класс. Таким образом, ваш код будет преобразован во что-то типа:

class OuterClass$1 extends ArrayList<Integer> {
    OuterClass$1(int i) {
      super();
      add(i);
    }
}

for (int i = 0; i < 200; i++) {
    ArrayList<Integer> currentList = new OuterClass$1(i);
}
15
ответ дан 3 December 2019 в 15:06
поделиться
Другие вопросы по тегам:

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