lambda表达式:构造器引用

时间:2021-01-16 19:13:45

构造器引用同方法引用类似,不同的是在构造器引用中方法名师new。例如,Button::new 表示Button类的构造器引用。对于拥有多个构造器的类,选择使用那个构造器取决于上下文。


可以使用数组类型来编写构造器引用。例如,int[]::new是一个含有一个参数的构造器引用,这个参数就是数组的长度。它等同于lambda表达式 x -> new int[x]。


数组构造器引用可以用来绕过Java中的一个限制。在Java中,无法构造一个泛型类型T的数组。表达式new T[n]是错误的,因为它会被擦除为 new Object[n]。假设我们希望构造一组按钮,Stream接口中有一个返回Object数组的toArray方法:

Object[] buttons = stream.toArray();
但是是返回Object[],我们想要的是Button[],stream API通过构造器引用解决了这个问题。它允许将Button[]::new传递给toArray方法: 

Button[] buttons = stream.toArray(Button[]::new)