专业编程基础技术教程

网站首页 > 基础教程 正文

玩转java8 lambda表达式三之对象方法引用

ccvgpt 2024-11-30 19:18:39 基础教程 1 ℃

java8 lambda表达式系列历史文章

玩转Java8 lambda表达式&函数式接口一

玩转java8 Lambda表达式

玩转java8 lambda表达式三之对象方法引用

玩转java8 Lambda表达式之静态方法引用

玩转java8 Lambda表达式二之实例方法引用


什么是方法引用?

Lambda还有一个非常重要的功能,就是方法引用。方法引用可以理解为lambda表达式的简便写法。方法引用是用来直接访问类或者实例的已经存在的方法或构造方法(函数),它比lambda表达式更加的简洁,更高的可读性,更好的复用性。


方法引用的语法

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


方法引用的分类


对象方法引用的定义

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

2.抽象方法剩余的参数恰好可以当做实例方法的参数。

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


对象方法引用的示例

废话少说,直接上干货,代码示例中都有重要注释

无输入参数,无返回值

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

2.同时g作为body体调用run方法的对象,run方法刚好没有参数

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类型为Girl

2,第二个参数String 类型,作为调用eat方法的参数 2.同时g作为body体调用方法eat的对象

public class LambdaObjectMethodTest2 {

    @Test
    public void test(){
        /**
         * 满足了对象方法引用条件:
         * 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的对象,刚好参数类型及个数匹配

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都有默认构造方法,若是带参构造方法又如何实现对象方法引用呢?作为作业留给大家练习。

下一章节将为大家分享构造方法引用,请大家持续关注。如有问题或不妥之处,欢迎拍砖。

最近发表
标签列表