• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:玩转Java-Lambda表达式之对象方法引用

java 搞代码 3年前 (2022-02-14) 19次浏览 已收录 0个评论

什么是办法援用?

Lambda还有一个十分重要的性能,就是办法援用。办法援用能够了解为lambda表达式的简便写法。办法援用是用来间接拜访类或者实例的曾经存在的办法或构造方法(函数),它比lambda表达式更加的简洁,更高的可读性,更好的复用性。

办法援用的语法

类名(或实例)::办法名

办法援用的分类

办法援用类型 语法 Lambda表达式
静态方法援用 类名::staticMethod (args)->类名.staticMethod(args)
实例办法援用 instance::instMethod (args)->instance::instMethod(args)
<u>对象办法援用</u> <u>类名::instMethod</u> <u>(instance,args)->类名::instMethod(args)</u>
构造方法援用 类名::new (args)->new 类名(args)

对象办法援用的定义

1.形象办法的第一个参数类型刚好是实例办法的对象类型;

2.形象办法残余的参数恰好能够当做实例办法的参数。

如果函数式接口的实现能满足以上的2个条件,就能够称之为对象办法援用。

对象办法援用的示例

废话少说,间接上干货,代码示例中都有重要正文

无输出参数,无返回值

1.第一个参数g类型为Girl,没有其它参数,阐明要调用无参办法

 2.同时g作为body体调用run办法的对象,run办法刚好没有参数
<code class="java">public class LambdaObjectMethodTest {

    @Test
    public void test(){
        /**
         * 满足了对象办法援用条件:
         * 1.第一个参数g类型为Girl,没有其它参数,阐明要调用无参办法
         * 2.同时也是body体调用办法的对象,run办法刚好没有参数
         */
        Consumer<Girl> c1 = (Girl g) -> g.run();
        c1.accept(new Girl());
    }

}
class Girl{
    public void run(){
        System.out.println("girl in running...");
    }
}
有参数,无返回值

1.第一个参数g类型为Girl2,第二个参数String 类型,作为调用eat办法的参数

 2.同时g作为body体调用办法eat的对象
<code class="java">public class LambdaObjectMethodTest2 {

    @Test
    public void test(){
        /**
         * 满足了对象办法援用条件<div style="color:transparent">来源gaodai.ma#com搞#代!码网</div>:
         * 1.第一个参数g类型为Girl2,第二个参数String 类型,作为调用eat办法的参数
         * 2.同时g作为body体调用办法eat的对象
         */
        BiConsumer<Girl2,String> c1 = (Girl2 g, String f) -> g.eat(f);
        c1.accept(new Girl2(),"苹果");
    }

}

class Girl2{

    public void eat(String food){
        System.out.println("girl eat "+food);
    }
}
有参数,有返回值

1.第一个参数g类型为Girl3,第二个参数为String类型,合乎g对象的getAge的参数类型

 2.同时g也是body体调用办法getAge的对象,刚好参数类型及个数匹配
<code class="java">public class LambdaObjectMethodTest3 {

    @Test
    public void test() {
        /**
         * 满足了对象办法援用条件:
         * 1.第一个参数g类型为Girl3,第二个参数为String类型,合乎g对象的getAge的参数类型
         * 2.同时g也是body体调用办法getAge的对象,刚好参数类型及个数匹配
         */
        BiFunction<Girl3,String, Integer> bf1 = (Girl3 g, String name) -> g.getAge(name);
        int age = bf1.apply(new Girl3(),"爱莎公主");
        System.out.println(age);
    }

}

class Girl3 {
    public Integer getAge(String name) {
        System.out.println(name + "is " + 20 + " old.");
        return 20;
    }
}

大家能够看出上述示例都是类Girl、Girl2、Girl3都有默认构造方法,若是带参构造方法又如何实现对象办法援用呢?作为作业留给大家练习


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:玩转Java-Lambda表达式之对象方法引用

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址