为什么方法引用可以使用非最终变量?
我对内部类和lambda表达式有些困惑,我试图问一个关于这个问题的问题,但后来出现了另一个问题,发布另一个问题可能比评论前一个问题更好。
直截了当:我知道(谢谢乔恩)这样的东西不会编译
public class Main {
public static void main(String[] args) {
One one = new One();
F f = new F(){ //1
public void foo(){one.bar();} //compilation error
};
one = new One();
}
}
class One { void bar() {} }
interface F { void foo(); }
由于Java管理闭包的方式,因为不是[有效]最终的等等。one
但是,为什么这是允许的呢?
public class Main {
public static void main(String[] args) {
One one = new One();
F f = one::bar; //2
one = new One();
}
}
class One { void bar() {} }
interface F { void foo(); }
不等同于 ?在第二种情况下,我不是面临着“使用过时的变量”的风险吗?//2
//1
我的意思是,在后一种情况下,执行后仍然有一个过时的副本(即引用旧对象)。这难道不是我们试图避免的那种模棱两可吗?one = new One();
f
one