兴冲冲的刷完力扣准备去群里吹波水,结果被群友甩出来的一张图打翻在原地。

 

函数式编程需要各位自行补充,lambda的使用(以前觉得自己对lambda了解的够详细了,真是在无知的时候不知道自己是无知)大家可以看我另一篇博客

学习jdk1.8的Lambda和Stream

 

言归正传,第一次看见这个写法当场就蒙在了原地,为什么

biFunction=A::test1;
可以通过编译?
明明这个方法只接受一个传参,而我们函数编程传递两个参数却一样可以呢?

这块需要两个知识点兼顾:
1.java隐藏关键字this
2.java8方法引用

首先在非静态方法中,方法只能通过实例对象来进行调用,因此无法凭空使用一个方法,lambda会将我们传递的第一个参数作为当前方法的调用者。
到这里 我们就可以明白为什么方法只接受一个参数,而我们传递两个的时候一样可以正确执行。


那么就会出现第二个问题,为什么是第一个参数作为调用者而不是第二个第三个或者最后一个?
到这里就需要说道我们另一个知识,就是我们的隐藏关键字this
关于this的概念:我们知道this 是隐式参数, 类的方法被调用时,系统会自动隐式传递一个this参数给当前方法。
在方法中表示对象。
而这个隐式参数的位置就是在我们方法中参数列表的第一位,如下图:

 

 

 

到此算是把我在群里的问题,迎刃而解。

写的不够好,希望大家多多海涵。