考虑以下代码片段
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
的签名如下所示。请注意,类型参数T
和A
完全无关。
public interface Stream<T> {
<A> A[] toArray(IntFunction<A[]> generator);
}
在ReferencePipeline.java的源代码中,您可以找到以下注释: