Java не поддерживает общие массивы. Массивы ковариантны, дженериков нет. Это означает, что если класс A расширяет класс B, то A [] также является B []. И код
A[] a = new A[10];
B[] b = a;
является законным.
Но это не так для дженериков. Вы не могли бы назначить Foo
на Foo
, даже если T расширяет X. И поэтому элементы Foo
не могут быть гарантированы безопасным типом.
EDIT Извините меня за просто ссылку, ve found Теория и практика Java: статья generics gotchas , которая объясняет все о ковариации массивов лучше, чем я даже мечтал.