Integer[]::new
这种写法是 Java 中方法引用的一种具体应用,它遵循 Java 方法引用的语法规则。
方法引用概述
方法引用是 Java 8 引入的一种简化 Lambda 表达式的语法糖,它允许你通过方法的名称直接引用已有的方法或构造函数。方法引用可以使代码更加简洁易读,尤其是在使用函数式接口时。
方法引用的四种类型
Java 中的方法引用主要有四种类型:
- 静态方法引用:
ClassName::staticMethodName
- 实例方法引用:
instanceReference::instanceMethodName
- 特定类型的任意对象的实例方法引用:
ClassName::instanceMethodName
- 构造函数引用:
ClassName::new
Integer[]::new
属于构造函数引用
Integer[]::new
是构造函数引用的一种特殊情况,用于引用数组的构造函数。下面详细分析它的规律:
1. 基本语法
对于普通类的构造函数引用,语法为 ClassName::new
,例如:
import java.util.function.Supplier;class Person {public Person() {System.out.println("Creating a new person.");}
}public class ConstructorReferenceExample {public static void main(String[] args) {Supplier<Person> personSupplier = Person::new;Person person = personSupplier.get();}
}
在这个例子中,Person::new
引用了 Person
类的无参构造函数,Supplier<Person>
是一个函数式接口,其 get
方法会调用该构造函数创建一个新的 Person
对象。
2. 数组构造函数引用
当需要创建数组时,同样可以使用构造函数引用,语法为 TypeName[]::new
,其中 TypeName
是数组元素的类型。例如:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class ArrayConstructorReferenceExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3);Integer[] array = numbers.stream().toArray(Integer[]::new);System.out.println(Arrays.toString(array));}
}
在这个例子中,Integer[]::new
引用了 Integer
数组的构造函数。Stream
的 toArray
方法需要一个 IntFunction<A[]>
类型的参数,该函数式接口接收一个整数参数(表示数组的长度),并返回一个对应类型和长度的数组。Integer[]::new
正好满足这个要求,它会根据传入的长度创建一个 Integer
数组。
总结
Integer[]::new
这种写法是 Java 方法引用中构造函数引用的一种具体应用,遵循了 TypeName[]::new
的语法规则,用于引用数组的构造函数。通过这种方式,可以简洁地创建指定类型和长度的数组。