在阅读Maurice Naftalin的Mastering Lambdas时,我遇到了以下例子。 第3章,第3.2.4节是两个例子。
//don't do this - race conditions!
library.stream().forEach(b -> pageCounter += b.getPageCount());
另一个
//formally correct but inefficient and ugly
library.stream().forEachOrdered(b -> { pageCount+=b.getPageCount();});
我的困惑是没有编写上述代码的原因。由于lambda不是为了对状态进行处理而且只能访问最终或有效的最终变量,所以上述代码首先如何有效?
如果我遗失了某些东西,有人可以帮助我理解。
提前致谢。
答案 0 :(得分:4)
由于括号错误,您的第一个示例的语法无效。但无论如何你可以省略它们:
//don't do this - race conditions!
library.stream().forEach(b -> pageCounter+=b.getPageCount());
//formally correct but inefficient and ugly
library.stream().forEachOrdered(b -> pageCount+=b.getPageCount());
两者都是有效的语法,如果pageCount
是一个可变的字段,则可以编译实例字段或static
字段,但当然,本书是是的,不推荐。
捕获变量的限制为final
或有效最终,仅适用于局部变量(包括参数)。