从 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 = truea = true 实际上是 shorthand,而 this 始终是 final(Java规格)。