这个问题在这里已经有答案了:
在封闭范围中定义的局部变量日志必须是final或有效final(5个答案)
上个月关门了。
我做了以下测试:
@Test
void verifyCorrectLimitForGroups() throws SQLException {
AbstractDAO<StudentModel, Long> studentsDAO = new StudentDAO(myDatasource);
List<StudentModel> students = studentsDAO.findAll();
for(int a=1;a<11;a++) {
assertTrue(students.stream().filter(i->i.getGroupID()==a).count()<30);
}
}
我的目标是测试30岁以下的学生 groupIDs
从1到10从未超过。为此,我决定使用Java8API流和一个简单的for循环。不幸的是,我遇到了一个编译问题: Local variable a defined in an enclosing scope must be final or effectively final.
这是否意味着我不能这样做,我应该找到一个不同的方法?
1条答案
按热度按时间smtd7mpg1#
正如错误所说,lambda表达式中使用的变量需要是“final或effectively final”,并且
a
显然是可变的。一个可能的解决方案是创建一个虚拟变量,该变量在循环的每次迭代中都被重新定义a
的值,但因此不会发生突变: