Модификация массива, определенного в области видимости в лямбде - PullRequest
0 голосов
/ 18 октября 2018

У меня следующий код, и он по праву отказывается компилироваться с ошибкой Локальная переменная numberArray, определенная в прилагаемой области видимости, должна быть окончательной или фактически конечной

InputReader reader = new InputReader(System.in);
int numInputs = reader.nextInt();
int[] numberArray = new int[numInputs];

IntStream.range(0, numInputs).forEach(i -> {
    numberArray[i] = reader.nextInt();
});

Однако этот фрагменткода компилируется и работает без ошибок, хотя и здесь, по сути, я делаю то же самое, изменяя inputArray внутри лямбды.

public int[] reverse(int[] inputArray) {
    IntStream.range(0, inputArray.length/2).forEach(i-> {
        int temp = inputArray[i];
        inputArray[i] = inputArray[inputArray.length-1-i];
        inputArray[inputArray.length-1-i] = temp;
    });
    return inputArray;
}

Есть идеи, почему существует это несоответствие?

1 Ответ

0 голосов
/ 18 октября 2018

Пожалуйста, убедитесь, что число Array не изменилось после цикла.В этом случае оно не будет считаться эффективным окончательным.

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