gpt4 book ai didi

java - Final 或 Effectively final 混淆

转载 作者:行者123 更新时间:2023-11-29 08:21:57 32 4
gpt4 key购买 nike

我确定在内部类中访问的变量应该声明为final 或有效final。但在下面的情况下我很困惑。不知道是不是我理解错了。

public class MyClass {
private boolean aBoolean = false;
private Consumer<Boolean> consumer;
private Consumer<Validatable> vConsumer; // Validatable is an interface that I wrote

public MyClass(Consumer<Boolean> c) {
this.vConsumer = validatable -> aBoolean = validatable.hasErrors();
this.consumer = c;
}

public void process() {
consumer.accept(this.aBoolean);
}
}

在上述情况下,我没有收到任何错误。怎么可能?请帮忙

最佳答案

正如我们在规范中看到的:

... starting in Java SE 8, a local class can access local variables and parameters of the enclosing block that are final or effectively final. A variable or parameter whose value is never changed after it is initialized is effectively final.

这意味着effectively final是一个只与变量和参数相关的概念。在这里我们可以看到您正在使用 lambda 中的 MyClass 字段而不是变量,它可能有多个赋值。

关于java - Final 或 Effectively final 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56949069/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com