Java中的双冒号“::”是Java 8引入的一种新的操作符,称为方法引用。方法引用提供了一种引用已存在的方法或构造函数的方式,而无需显式地提供方法名。方法引用可以使代码更简洁、易读。
方法引用有以下四种类型:
1、静态方法引用:
语法:类名::静态方法名
示例:String::valueOf 等价于 (x) -> String.valueOf(x)
2、实例方法引用:
语法:对象::实例方法名
示例:System.out::println 等价于 (x) -> System.out.println(x)
3、特定对象的实例方法引用:
语法:类名::实例方法名
示例:String::length 等价于 (str) -> str.length()
4、构造方法引用:
语法:类名::new
示例:ArrayList::new 等价于 () -> new ArrayList<>()
下面是一些示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
public class MethodReferenceExample {
public static void main(String[] args) {
// 静态方法引用
Runnable runnable = () -> System.out.println("Hello, World!");
Runnable runnableMethodRef = System.out::println;
runnableMethodRef.run(); // 输出 "Hello, World!"
// 实例方法引用
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Consumer<Integer> consumer = (number) -> System.out.println(number);
Consumer<Integer> consumerMethodRef = System.out::println;
numbers.forEach(consumerMethodRef); // 输出 1 2 3 4 5
// 类的实例方法引用
Consumer<String> stringConsumer = String::toUpperCase;
System.out.println(stringConsumer.accept("hello")); // 输出 "HELLO"
// 构造方法引用
Supplier<List<String>> listSupplier = List::new;
List<String> newList = listSupplier.get(); // 创建一个新的空列表
}
}
在这个示例中,我们使用了不同类型的方法引用来简化代码。通过使用方法引用,我们可以更简洁地表示对现有方法的调用,从而提高代码的可读性和效率。
|