Olá pessoal estava testando alguns métodos envolvendo genéricos e me deparei com a seguinte situação:
//tenho este método que retorna um array lista de integer
public List<? extends Number> criarLista3() {
return new ArrayList<Integer>();
}
public static void main(String[] args) {
MetodosGenericos4 m = new MetodosGenericos4();
//aqui está a dúvida estou fazendo um casting de ArrayList<Integer> para ArrayList<Number>
//funcionou mas ao meu ver estaria errado pois não se pode fazer ArrayList<Number> = ArrayList<Integer>, tudo bem eu fiz o casting, mas o meu retorno está referenciando um ArrayList<Integer> isso não daria um erro????
ArrayList<Number> lista1 = (ArrayList<Number>)m.criarLista3();
lista1.add(new Float(12));
System.out.println(lista1);
}
Ao meu ver deu certo esse casting por causa do seguinte tipo de retorno no método
public List<? extends Number> criarLista3() { ... }
//com isso eu posso fazer o casting do subtipo para o supertipo na hora de chamar o método
Estou correto nesta afirmação???
Se alguém puder me ajudar, ficarei grato.
Vinícius.