什么是双冒号运算符
双冒号运算符 :: 是在 Java 8 中实现的一个新特性——方法引用。它能使用我们将方法作为一个参考传递到其他的方法中。它能将简化超级长的代码,提高代码可读性。
基本格式:
ClassName::methodName
双冒号运算符不会调用方法,而是传递方法的地址。它与函数引用和涉及较远。
方法引用的类型
方法引用可以分为下列四种:
-
非静方法引用:引用一个实例属于的非静方法。
格式:
instance::methodName
例如:
String::toLowerCase
-
静态方法引用:引用一个类中的静态方法。
格式:
ClassName::staticMethodName
例如:
Math::abs
-
构造器引用:引用一个类的构造器。
格式:
ClassName::new
例如:
ArrayList::new
-
类属方法引用:引用一个元素的方法。
格式:
ClassName::instanceMethodName
例如:
String::compareToIgnoreCase
# 应用场景在实际工作中,双冒号运算符适合以下情况:1. **代替区域编译器表达式**对于一些存在方法,我们可以使用方法引用代替。例如:
List names = Arrays.asList(“John”, “Jane”, “Doe”);
names.forEach(System.out::println);
比较优雅:
names.forEach(name -> System.out.println(name));
2. **在 Stream 中简化操作**方法引用能让我们在操作流中越发简化。例如:
List names = Arrays.asList(“john”, “jane”, “doe”);
names.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
3. **构造器引用在实例列表中复制例实**例如:
Supplier<List> listSupplier = ArrayList::new;
List list = listSupplier.get();
4. **调用本地方法最优化**在扩展和保留系统调用的同时,尽量提高优化分析。# 实践例子```java
import java.util.Arrays;
import java.util.List;public class StaticMethodReference {public static void print(String str) {System.out.println(str);}public static void main(String[] args) {List<String> list = Arrays.asList("Hello", "World", "Java");list.forEach(StaticMethodReference::print);}}