Потому что toArray()
создает массив Object, и вы не можете превратить 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
s позже
Ранее я задавал вопрос о дженериках Java, и мне было указано на этот FAQ, который был очень полезен: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html