为什么匿名内部类中的这个代表lambda中的不同对象

时间:2018-01-24 07:31:21

标签: java lambda anonymous-inner-class

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

1 个答案:

答案 0 :(得分:-1)

考虑一个lambda不是一个对象。

我们是您的第一个实现,您通过执行new Foo()来创建内部类的对象。因此,在此实现中this引用此对象。

在lambda实现中,没有这样的对象,this引用了封闭类。