有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

作为read

Lambda expression eliminates the need of anonymous class and gives a very simple yet powerful functional programming capability to 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) 个答案

  1. # 1 楼答案

    认为λ不是对象。

    在第一个实现中,通过执行new Foo()来创建内部类的对象。所以在这个实现中this指的是这个对象

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