先上查到的结论:
1、lambda表达式里只能引用被final 修饰的本地变量 ,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。
2、局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
3、lambda表达式里不允许声明一个与局部变量同名的参数或者局部变量。
报错代码:
//到期车辆数量
int expireNum = 0;
/*此处略过n行代码*/
vehicleManagementList.forEach(vehicleManagement -> {
/*此处再略过n行代码*/
//判断车辆是否到期
Date now = new Date();
if (vehicleManagement.getExpireTime().getTime() <= now.getTime()) {
++expireNum;
}
});
今天要加个计算车辆到期数量的功能,然后直接在原代码里加了上面这玩意儿,结果一直报错
报错: 在lambda表达式中使用的变量应该是final或有效的final
解决办法: 换个循环方式,不用lambda(规避限制,可能办法不是最好的,但是能用)
//到期车辆数量
int expireNum = 0;
/*此处略过n行代码*/
for (VehicleManagementDO vehicleManagement : vehicleManagementList) {
/*此处再略过n行代码*/
//判断车辆是否到期
Date now = new Date();
if (vehicleManagement.getExpireTime().getTime() <= now.getTime()) {
++expireNum;
}
}