3.3 方法引用

方法引用是Lambda表达式的一种简化形式,用于直接使用已存在的方法。它适用于函数式接口,要求接口的抽象方法与引用方法的参数列表和返回类型匹配。方法引用分为类引用实例方法、对象引用实例方法、类引用静态方法和类引用构造方法四种类型。示例代码展示了如何在不同场景下使用方法引用。

1.简介
(1).概念
方法引用本质上就是Lambda表达式,Lambda表达式是函数式接口的实例,所以说方法引用也是函数式接口的实例。

(2).使用场景
当要传递给Lambda体的操作,已经有实现的方法了,就可以使用方法引用。

(3).使用条件
接口中的抽象方法的形参列表和返回值类型与方法引用的方法形参列表和返回值相同。

2.语法
方法引用使用一对冒号(::)来引用方法,格式如下。

类或对象 :: 方法名

3.使用实例
(1).类引用实例方法

public class Test {
    public static void main(String[] args) {
        //类引用实例方法,compareTo()为实例方法
        Comparator<String> comparator = String::compareTo;
        int compare = comparator.compare("Hello", "Hello");
        System.out.println(compare);
    }
}

(2).对象引用实例方法

public class Test {
    public static void main(String[] args) {
        Consumer<String> consumer = System.out::println;
        consumer.accept("只消费,不返回");
    }
}

(3).类引用静态方法

public class Test {
    public static void main(String[] args) {
        //类引用静态方法(compare()为静态方法)
        Comparator<Integer> comparator = Integer::compare;
        System.out.println(comparator.compare(12, 11));
    }
}

(4).类引用构造方法

public class Test {
    static class Person {
        private String name;

        public Person() {
            System.out.println("无参数构造方法执行了");
        }

        public Person(String name) {
            System.out.println("单参数构造方法执行了");
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }


    public static void main(String[] args) {
        //使用Lambda表达式,调用无参构造方法
        Supplier<Person> supplier1 = () -> new Person();
        supplier1.get();

        //使用方法引用,引用无参构造方法
        Supplier<Person> supplier2 = Person::new;
        supplier2.get();

        //使用Lambda表达式,调用单参构造方法
        Function<String, Person> function1 = name -> new Person(name);
        Person person1 = function1.apply("小慕");
        System.out.println(person1.getName());
        
        //使用方法引用,引用单参构造方法
        Function<String, Person> function2 = Person::new;
        Person person2 = function1.apply("小明");
        System.out.println(person2.getName());
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值