java的lambda表达式的方法引用问题

刚学看这个表达式,感觉这个东西有些地方是个玄学啊,没搞明白...
刚发现的一个问题,有一个TestLambda2的类,还有一个TestLambda4的接口
类中的方法:
clipboard.png

接口中的:

clipboard.png

参数一样,类中的是static修饰的,两个没有任何联系,继承啊实现啊这些,然后:

clipboard.png

成立了...即使我在弄一个新的接口然后参数一样,返回类型一样,然后也没有任何联系,依然可以引用,求大神给一个通俗点的教程地址...

阅读 1.8k
2 个回答

Java 是面向对象的语言,所以各种语法都无法脱离 而存在,而看问题也要透过现象看到本质:

对于 TestLambda4 lambda4 = TestLambda2::test1 这个方法引用,你可以理解为:

TestLambda4 lambda4 = str -> TestLambda2.test1(str);

而对于 Lambda 表达式,虽然底层实现和匿名内部类有区别,但是在语法功能上,二者是完全一致的,即可以把上面的 Lambda 理解为:

TestLambda4 lambda4 = new TestLambda4() {

    @Override
    public String test111(String s) {
        return TestLambda2.test1(s);
    }
    
};

Lambda表达式的引入是java对函数式编程思想的引入。简单的来说,方法也可以作为一种变量进行赋值和传递。但是因为java本身的面向对象思想,所以以类的形式对函数式编程思想进行实现。
推荐阅读《java8 实战》来深入理解一下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题