首页 > 解决方案 > 如何在 lambda 中使用无效的最终变量

问题描述

我很好奇为什么下面的代码是有效的(肯定不是最佳实践),因为我一直认为在这种情况下(order)lambda 中的变量需要是最终的,或者至少是有效的最终的。那么如何增加每个 ref 的 order 值呢?ref 包含不断增加的数字 0, 10, 20, ...

public class A {

  private int order = 0;

  public void addOrder() {
    this.order = 0;
    getRefsSomewhere().stream().forEach(ref -> updateRef(ref, order+=10));
  }
}

如果我只是稍微改变它就不再编译(如预期的那样)

public class A {
  public void addOrder() {
    int order = 0;
    getRefsSomewhere().stream().forEach(ref -> updateRef(ref, order+=10));
  }
}

为什么第一个示例有效的任何指示?

标签: lambdajava-8

解决方案


推荐阅读