1. 什么是方法引用?
-
定义 :Java 8 引入的语法糖,用于 简化 Lambda 表达式,直接引用已有的方法。
-
符号 :使用
::
双冒号操作符。 -
本质:将方法作为函数式接口的实例传。
2. 方法引用的四种类型
类型 | 语法 |
---|---|
静态方法引用 | Class::static_method |
特定对象的实例方法引用 | Class::method |
实例方法引用 | instance::method |
构造方法引用 | Class::new |
3.方法引用示例
java
//1.静态方法引用
List<Integer> numbers = Arrays.asList(1, 3, 2, 5, 4);
// 使用 Lambda 表达式
Stream<Integer> sortedInLambda = numbers.stream().sorted((a, b) -> Integer.compare(a, b));
System.out.println(sortedInLambda);
// 使用方法引用
Stream<Integer> sorted = numbers.stream().sorted(Integer::compare);
System.out.println(sorted.collect(Collectors.toList())); //[1, 2, 3, 4, 5]
//2.特定对象的实例方法引用
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用 Lambda 表达式
names.forEach(s -> System.out.println(s));
// 使用方法引用
names.forEach(System.out::println);
//4.构造方法引用
// 使用 Lambda 表达式
Supplier<List<String>> supplier1 = () -> new ArrayList<>();
// 使用方法引用
Supplier<List<String>> supplier2 = ArrayList::new;
3实例方法引用
java
class Printer {
// 实例方法
public void printMessage(String message) {
System.out.println(message);
}
}
public class MethodReferenceExample {
public static void main(String[] args) {
Printer printer = new Printer();
// 使用实例方法引用
Runnable r = printer::printMessage;
r.run(); // 输出 null,因为没有传递参数
}
}
4. 方法引用的优势
-
简化 Lambda 表达式,提升代码简洁性。
-
直接引用已有方法,意图清晰,支持静态方法、实例方法、构造方法的引用。
-
与函数式接口(如
Consumer
、Supplier
)紧密结合。 -
合理使用可提升代码的可维护性和可读性。
5.参考
......