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

被折叠的 条评论
为什么被折叠?



