考虑以下代码片段

String strings[] = {"test"};
final List<String> collect = java.util.Arrays.stream(strings).collect(java.util.stream.Collectors.toList());
final Double[] array = java.util.Arrays.stream(strings).toArray(Double[]::new);

为什么Java可以保证在collection情况下保证正确的类型(将collect的通用类型更改为例如Double会导致编译时错误),而在数组情况下却不能保证正确(尽管apply(int)Double[]::new给出了Double[],但不能保证正确的类型) Object[],但如果如上所述使用不当,则会抛出ArrayStoreException)?

如果在不更改IntFunction调用中给定的toArray的情况下更改流的类型,则生成编译时错误的最佳方法是什么?

最佳答案

方法Stream::toArray的签名如下所示。请注意,类型参数TA完全无关。

public interface Stream<T> {
    <A> A[] toArray(IntFunction<A[]> generator);
}

ReferencePipeline.java的源代码中,您可以找到以下注释:

10-08 13:29
查看更多