Java Generics - Sem Cast
A conversão para um tipo parametrizado não é permitida, a menos que seja parametrizada por curingas ilimitadas.
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;
Para conseguir o mesmo, curingas ilimitadas podem ser usados.
private static void add(Box<?> box) {
Box<Integer> integerBox = (Box<Integer>)box;
}