Значение массива, переданное в метод - PullRequest
0 голосов
/ 26 сентября 2019

Я понимаю передачу Java по значению и передачу по ссылке.Но я столкнулся с чем-то, что требует хорошего понимания.Я заметил, что, передавая значение массива методу, оно передается в виде ссылки в лямбда-выражении.

private static final List<Callable<String>> CALLABLE_LIST = new ArrayList<>();
Integer currentPageCount[] = {0};

for (int i = 0; i < 10; i ++) {
   currentPageCount[0] = i;
   CALLABLE_LIST.add(() -> validatePaginatedContent(currentPageCount[0]));
}

При печати этого списка всегда печатается последнее значение внутри массива.Что происходит с лямбда-функцией.

Ясность этого поведения будет оценена.

1 Ответ

0 голосов
/ 26 сентября 2019

Ваша переменная currentPageCount является массивом, и вы передаете массив в лямбду.Как только лямбда вызывается, она оценивает currentPageCount[0].

Поскольку массивы передаются по ссылке, вы получаете текущее значение currentPageCount[0], которое оказывается последним значением i.

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