从 Java 中的 lambda 表达式引用的变量
Variable referencing from a lambda expression in Java
为什么 Java 允许这样做,
class Test {
boolean a;
public void test() {
...
object.method(e -> a = true);
}
}
但不是这个,
class Test {
public void test() {
boolean a;
...
object.method(e -> a = true);
}
}
对于第二个例子,它抛出:
local variables referenced from a lambda expression must be final or effectively final
第二个示例中的唯一区别是变量是在方法内部声明的,而不是 class 本身。我是 Java 编程的初学者,我是否遗漏了一些明显的东西?
第一个示例有效,因为对于 this.a = true
,a = true
实际上是 shorthand,而 this
始终是 final
(Java规格)。
为什么 Java 允许这样做,
class Test {
boolean a;
public void test() {
...
object.method(e -> a = true);
}
}
但不是这个,
class Test {
public void test() {
boolean a;
...
object.method(e -> a = true);
}
}
对于第二个例子,它抛出:
local variables referenced from a lambda expression must be final or effectively final
第二个示例中的唯一区别是变量是在方法内部声明的,而不是 class 本身。我是 Java 编程的初学者,我是否遗漏了一些明显的东西?
第一个示例有效,因为对于 this.a = true
,a = true
实际上是 shorthand,而 this
始终是 final
(Java规格)。