Ответ 1
Потому что toArray()
создает массив объекта, и вы не можете сделать Object[]
в DataObject[]
просто путем его литья. toArray(DataObject[])
создает массив DataObject
.
И да, это недостаток класса Collections и то, как Generics были обучены в Java. Вы ожидаете, что Collection<E>.toArray()
может вернуть массив из E, но это не так.
Интересная вещь о вызове toArray(DataObject[])
: вам не нужно делать массив "a" достаточно большим, поэтому вы можете называть его toArray(new DataObject[0])
, если хотите.
Вызов, как toArray(new DateObject[0])
, на самом деле лучше, если вы позже используете .length
для получения длины массива. если начальная длина была большой, и тот же объект массива, который вы передали, был возвращен, тогда вы можете столкнуться с NullPointerException
позже
Я задал вопрос о Java-генераторах ранее и указал на этот FAQ, который был очень полезен: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html