在Java中,我们可以通过一维数组构造函数引用创建
当然,我们可以这样写:
但这种行为与以下不同:
IntFunction<String[]>
。 // both do the same thing
IntFunction<String[]> createArrayL = size -> new String[size];
IntFunction<String[]> createArrayMR = String[]::new;
现在我想知道为什么我们不能用二维数组来实现这个:
BiFunction<Integer, Integer, String[][]> createArray2DL =
(rows, cols) -> new String[rows][cols];
// error:
BiFunction<Integer, Integer, String[][]> createArray2DMR =
String[][]::new;
当然,我们可以这样写:
当然我们可以这样写:
IntFunction<String[][]> createArray2DInvalidL = String[][]::new;
System.out.println(createArray2DInvalidL.apply(3)[0]); // prints null
但这种行为与以下不同:
new String[3][3]
由于行数组不会被初始化,因此我的问题是:为什么String[][]::new
不能用于二维数组(对我来说,这看起来像是语言设计上的不一致)?
BiFunction<Integer, Integer, String[][]> createArray2DL = (a,b) -> String[][]::new;
会产生错误? - user43968BiFunction<Integer, Integer, IntFunction<String[][]>> createArray2DL = (a, b) -> String[][]::new;
- Grzegorz Piwowarek