Рассмотрим следующий фрагмент кода
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 может гарантировать правильный тип в случае сбора (изменение универсального типа сбора на, например, Double приводит к ошибке времени компиляции), но не в случае массива (прекрасно компилируется, несмотря на apply(int)
из Double[]::new
дает Double[]
, а не Object[]
, но выдает ArrayStoreException
если используется неправильно, как указано выше)?
Каков наилучший способ генерировать ошибку времени компиляции в случае, если я изменю тип потока, не изменяя данную IntFunction
в вызове toArray
?