Учебники

Java Generics — без ролей

Преобразование в параметризованный тип не допускается, если оно не параметризовано неограниченными подстановочными знаками.

Box<Integer> integerBox = new Box<Integer>();
Box<Number> numberBox = new Box<Number>();
//Compiler Error: Cannot cast from Box<Number> to Box<Integer>
integerBox = (Box<Integer>)numberBox;

Чтобы достичь того же, можно использовать неограниченные символы подстановки.