Возвращает анонимный класс, который использует последний примитив. Как это работает? - PullRequest
4 голосов
/ 23 апреля 2010

Мне было интересно, может кто-нибудь объяснить, как работает следующий код:

public interface Result {
  public int getCount();
  public List<Thing> getThings();
}


class SomeClass {
...
  public Result getThingResult() {
    final List<Thing> things = .. populated from something.

    final int count = 5;

    return new Result {
      @Override
      public int getCount() {
        return count;
      }

      @Override
      public List<Thing> getThings();
        return things;
      }
    }
  }
...
}

Где в памяти хранятся примитив int, ссылка List и экземпляр List?Это не может быть в стеке .. так где?Есть ли разница между обработкой ссылок и примитивов в этой ситуации?

Спасибо большое, Тим П.

1 Ответ

4 голосов
/ 23 апреля 2010

Используемые конечные локальные объекты (и любые внешние ссылки this) копируются в синтетические поля внутреннего класса во время построения.Ссылки и примитивы, как всегда, обрабатываются одинаково.Оба (мелкие) копируются.

Вы можете использовать javap из JDK, чтобы увидеть, что генерируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...