【发布时间】:2016-11-08 18:12:10
【问题描述】:
我正在尝试从 pojo 创建一个 getValue() 函数,在这个意义上使用细节类值的汇总:
@Transient
public BigDecimal getValue() {
BigDecimal sum = new BigDecimal(0);
details.stream().forEach((detail) -> {
sum = sum.add(detail.getValue());
});
return sum;
}
但是我不知道为什么sum = sum.add(detail.getValue());这行会引发这个错误:
从 lambda 表达式引用的局部变量必须是 final 或 有效地最终
你能告诉我我做错了什么吗?谢谢。
【问题讨论】:
-
错误信息很清楚:如果你想从 lambda 访问局部变量 (
sum),它必须是final。所以你不能按照你展示的方式做到这一点,而必须以另一种方式来处理它。 -
对,我发布了一个答案说,但后来意识到它仍然行不通,因为他试图修改 sum。
-
但是如果我声明局部变量
sum像 `final' 那么我会得到下一个错误:“无法为最终变量 sum 赋值” -
@axiorema 正确。 Lambda不会允许你像这样修改局部变量。
标签: java