java8 stream toArray 问题 - 为什么我不需要在这里为 int[][]::new 指定数组大小?

ste*_*ken -1 java java-stream

使用下面的代码,我可以复制二维数组,但是为什么我不需要在这里为 int[][]::new 指定数组大小?

int[][]source= {{0, 1, 0}, {0, 0, 1}, {1, 1, 1}, {0, 0, 0},{0, 0, 0}};

int[][] destination=Arrays.stream(source)
                    .map(a ->  Arrays.copyOf(a, a.length))
                    .toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)

are*_*eus 5

因为你提供的不是数组,而是对构造数组的方法的引用。该toArray实施将提供大小来调用构造函数。

  • @stewchicken:不,因为那时内部数组已经创建了。将使用此参数创建的“int[][]”视为一个一维数组,其中元素类型恰好是另一个一维数组“int[]”。基本上,该行将有效地执行与“new int[someSize][]”等效的操作。 (3认同)