首页 > 解决方案 > 修改在 lambda 的封闭范围中定义的数组

问题描述

我有以下代码,它正确地拒绝编译错误Local variable numberArray defined in an enclosure scope must be final or Effective final

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();
});

然而,这段代码编译和工作没有任何错误,虽然在这里,我基本上也在做同样的事情,在 lambda 中修改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;
}

知道为什么存在这种差异吗?

标签: javaarrayslambdajava-8

解决方案


请确保 numberArray 在循环后未更改。在这种情况下,它不会被视为有效的最终结果。

numberArray = ...

推荐阅读