155. Java Lambda 表达式 - 从 Lambda 到更简洁的写法:掌握 Java 静态方法引用

41 阅读2分钟

155. Java Lambda 表达式 - 从 Lambda 到更简洁的写法:掌握 Java 静态方法引用

Java 中,方法引用是对某个方法的直接引用,它可以作为更简洁的替代方案来表达 lambda 表达式。方法引用分为几种类型,其中之一就是静态方法引用。静态方法引用使得你能够直接引用类中的静态方法,从而简化代码。

1. 静态方法引用

静态方法引用是指通过 ClassName::methodName 的方式引用静态方法。它与使用 lambda 表达式实现的功能相同,但在某些情况下,方法引用可以使代码更简洁和可读。

一般语法:

RefType::staticMethod

示例: 假设你有一个 lambda 表达式,如下所示:

DoubleUnaryOperator sqrt = a -> Math.sqrt(a);

这个 lambda 表达式实际上是对静态方法 Math.sqrt() 的引用。我们可以用方法引用来替换它:

DoubleUnaryOperator sqrt = Math::sqrt;

这里,Math::sqrt 就是对 Math 类中的静态方法 sqrt 的引用。你可以看到,使用方法引用后,代码变得更加简洁。

2. 静态方法引用有多个参数

静态方法引用不仅可以引用无参数的方法,也可以引用接受多个参数的方法。让我们看看一个接受两个参数的例子:

示例: 假设你有以下的 lambda 表达式,用于返回两个整数中的最大值:

IntBinaryOperator max = (a, b) -> Integer.max(a, b);

我们可以通过方法引用将其简化为:

IntBinaryOperator max = Integer::max;

这里,Integer::max 就是对 Integer 类中的静态方法 max 的引用,它接收两个整数并返回较大的那个。通过方法引用,代码变得更加简洁并且易于理解。

总结

静态方法引用的使用场景通常出现在你需要引用一个类的静态方法时。相比于使用 lambda 表达式,静态方法引用更加简洁。只要能够从方法签名中推断出参数和返回类型,就可以用方法引用替代 lambda 表达式。

练习

  1. 将以下的 lambda 表达式用静态方法引用替代:

    BiFunction<String, String, String> joiner = (s1, s2) -> String.join("-", s1, s2);
    

    答案:

BiFunction<String, String, String> joiner = String::join;


2. 将以下的 `lambda` 表达式用静态方法引用替代:

```java
DoubleBinaryOperator power = (x, y) -> Math.pow(x, y);

答案:

DoubleBinaryOperator power = Math::pow;

通过这些示例和练习,你可以更加熟悉静态方法引用,并在适当的场景中使用它们以简化代码。