Java 8 中引入了 Lambda 表达式和方法引用,其中方法引用是一种更简洁、更直观的 Lambda 表达式的方式。方法引用允许我们通过方法的名称来引用一个已经存在的方法,它是一种更简洁、更直观的 Lambda 表达式的方式。

1. 定义方法引用

定义方法引用的一般格式为:类名或对象名 :: 方法名。根据方法的不同,可以分为四种类型的方法引用:
- 静态方法引用:类名 :: 静态方法名
- 实例方法引用:实例对象名 :: 实例方法名
- 特定类型方法引用:特定类的任意对象 :: 实例方法名
- 构造方法引用:类名 ::new

2. 静态方法引用

静态方法引用允许我们直接通过类名来引用已经存在的静态方法。例如,可以使用 Math 类的静态方法 max 来比较两个数的大小,方法引用的写法如下:

int result = Math.max(a, b);
Java

可以使用方法引用来简化上述代码:

IntBinaryOperator max = Math::max;
int result = max.applyAsInt(a, b);
Java

3. 实例方法引用

实例方法引用允许我们通过实例对象来引用已经存在的实例方法。例如,可以使用 String 类的实例方法 toUpperCase 将字符串转换为大写,方法引用的写法如下:

String result = str.toUpperCase();
Java

可以使用方法引用来简化上述代码:

UnaryOperator<String> toUpperCase = String::toUpperCase;
String result = toUpperCase.apply(str);
Java

4. 特定类型方法引用和构造方法引用

特定类型方法引用允许我们通过特定类的任意对象来引用已经存在的实例方法。相比实例方法引用,特定类型方法引用需要将方法的第一个参数作为调用方法的对象。例如,可以使用 Comparator 接口的 compare 方法来比较两个对象的大小,方法引用的写法如下:

int result = comparator.compare(a, b);
Java

可以使用方法引用来简化上述代码:

Comparator<Integer> comparator = Integer::compare;
int result = comparator.compare(a, b);
Java

构造方法引用允许我们通过类名来引用已经存在的构造方法。例如,可以使用 String 类的构造方法创建一个新的字符串对象,方法引用的写法如下:

String str = new String();
Java

可以使用方法引用来简化上述代码:

Supplier<String> supplier = String::new;
String str = supplier.get();
Java

通过方法引用,我们可以更方便地使用已经存在的方法,使代码更简洁、易读。在 Java 8 中,方法引用是一种非常强大的特性,可以大大提高我们的代码效率和可读性。