Ответ 1
Сигнатура метода Stream::toArray
выглядит следующим образом. Обратите внимание, что параметры типа T
и A
совершенно не связаны.
public interface Stream<T> {
<A> A[] toArray(IntFunction<A[]> generator);
}
В источнике ReferencePipeline.java вы можете найти следующий комментарий:
Поскольку
A
имеет никакого отношения кU
(невозможно объявить, чтоA
является верхней границейU
), статической проверки типов не будет. Поэтому используйте необработанный тип и примитеA == U
вместо того, чтобы распространять разделениеA
иU
всей базе кода. Тип времени выполненияU
никогда не проверяется на равенство с типом компонента типа времени выполненияA[]
. Проверка времени выполнения будет выполняться, когда элемент хранится вA[]
, поэтому, еслиA
не являетсяArrayStoreException
U
будетArrayStoreException
.