为read
Lambda表达式消除了匿名类的需要并给出了一个 Java的非常简单但功能强大的函数编程功能。
我理解lambda是用单一方法替换内部类以消除代码的庞大性
public class Main {
interface Foo {
int x = 20;
void bar();
}
public static void main(String[] args) {
Main app = new Main();
app.start();
}
int x = 10;
public void start()
{
Main test = new Main();
test.test(new Foo()
{
@Override
public void bar() {
System.out.println("Inner Class X= " + this.x);
}
});
test.test(() -> System.out.println("Lambda X= " + this.x));
}
public void test(Foo foo) {
foo.bar();
}
}
我得到的输出是
Inner Class X = 20
Lambda X = 10
我期待的是
Inner Class X = 20
Lambda X = 20
答案 0 :(得分:-1)
考虑一个lambda不是一个对象。
我们是您的第一个实现,您通过执行new Foo()
来创建内部类的对象。因此,在此实现中this
引用此对象。
在lambda实现中,没有这样的对象,this
引用了封闭类。