• (隐式参数)java8的方法引用之重新认识java的this关键字


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

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

    学习jdk1.8的Lambda和Stream

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

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

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

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


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

     

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

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

     
  • 相关阅读:
    [转]责任链模式
    spring中常见注解描述
    [转]外观模式
    [转]策略模式
    分布式事务实践
    SpringBoot入门
    服务器性能调优
    kvm qemu内幕介绍
    xen 保存快照的实现之 —— device model 状态保存
    xen hypercall 的应用层实现
  • 原文地址:https://www.cnblogs.com/MQTimor/p/11498567.html
Copyright © 2020-2023  润新知