当前位置: 首页 > 知识库问答 >
问题:

为什么对于实例变量[重复]忽略“Lambda表达式中使用的变量必须是final或实际上是final”警告

乐正乐湛
2023-03-14

我正在研究Java8流,我理解lambdas的唯一问题是为什么lambdas中有效的最后警告被忽略,例如实例(和静态)变量。我似乎在网上找不到任何关于它的参考,因为大多数页面只会谈论“有效最终”的定义。

public class LambdaTest {

    int instanceCounter = 0;

    public void method() {
        int localCounter = 0;
        instanceCounter = 5; //Re-assign instance counter so it is no longer effectively final

        Stream.of(1,2,3).forEach(elem -> instanceCounter++); //WHY DOES THE COMPILER NOT COMPLAIN HERE
        Stream.of(1,2,3).forEach(elem -> localCounter++); //Does not compile because localCounter is not effectively final
    }
}

共有1个答案

伏默
2023-03-14

我们往往会忘记instanceCounter实际上是this.instanceCounter,您正在捕获this,这实际上是最终的。至于为什么需要这样,答案显然就在这里

 类似资料: