java - 修改在 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;
}
知道为什么存在这种差异吗?
解决方案
请确保 numberArray 在循环后未更改。在这种情况下,它不会被视为有效的最终结果。
numberArray = ...
推荐阅读
- windows - 什么是 ssh 公钥
- azure - Azure REST API 列出所有注册的应用程序 (Azure Active Directory)
- php - 使用 foreach PHP 排序数据显示最近 30 天的数据
- node.js - VScode Remote WSL 上的 Node.js 调试,VSC 找不到节点二进制文件
- flutter - 线性渐变故障的 Flutter ShaderMask 问题
- logging - 如何每 10 秒有效地从 20 台机器的 1000s 文件夹中收集日志
- javascript - 在 nuxt 中应用 vuex 方法时,Eslint 无法正常工作
- angular - 使用角度路由更改组件时数据表分页不起作用
- aggregation-framework - 使用管道与 foreign/localField 进行慢速查找
- date - 显示日期范围公式 Excel