importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;importjava.util.Queue;publicclassCollections{publicstaticvoidmain(String[]args){//List lista = new ArrayList();//List<? extends Object> lista = new ArrayList<Integer>();//List<Integer> lista = new ArrayList<Integer>();//ArrayList<Number> lista = new ArrayList<Integer>(); //ArrayList<? extends Number> lista = new ArrayList<Integer>(); List<?superInteger>lista=newArrayList<Integer>();//List<Integer> lista = new List<Integer>();// instanciando uma interface//<Integer> lista = new LinkedList<Integer>();lista.add(2);}}
Primeiro essa aqui nao da erro, pois a palavra reservada extends define tudo que esta a abaixo na sua arvore de herança, inclusive a propria classe.
ArrayList<Number>lista=newArrayList<Integer>()
Em generics, nao existe polimorfismo.
List<?superInteger>lista=newArrayList<Integer>()
E isso funciona, pq a palavra reservada super define tudo que esta a acima na sua arvore de herança, inclusive a propria classe.
[]'s
joaoorso
Obrigado :thumbup:
Agora falta pouco :lol:
Recapitulando:
Listlista=newArrayList();// Compila normalmenteList<?extendsObject>lista=newArrayList<Integer>();// A linhha compila. Mas levanta a questão abaixoList<Integer>lista=newArrayList<Integer>();// Compila normalmenteArrayList<Number>lista=newArrayList<Integer>();// Não compila. Polimorfismo não funciona com Generics. ArrayList<?extendsNumber>lista=newArrayList<Integer>();// A linhha compila. Mas levanta a questão abaixoList<?superInteger>lista=newArrayList<Integer>();// Compila normalmenteList<Integer>lista=newList<Integer>();// Não Compila. Está instanciando uma interface. Listlista=newLinkedList<Integer>();// Compila normalmenteList<Integer>lista=newLinkedList<Integer>();// Compila normalmente
Sendo que :
imagem maldita !!! Se não tiver aparecendo veja pelo caminho :