Dúvidas sobre Generics

Bem tenho duvidas sobre por qual motivo as linhas abaixo não compilam…

List<? extends Object> lista = new ArrayList<Integer>();// Não poderia instanciar qualquer coisa que fizer extends Object ?
ArrayList<Number> lista = new ArrayList<Integer>(); // Não dá certo mas Integer, extends Number. Então pq não funciona?
List<? super Integer> lista = new ArrayList<Integer>();// Esta linha funciona normalmente. Alguém pode explica-la?

Exemplo completo:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Collections {
    public static void main(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<? super Integer> lista = new ArrayList<Integer>();
     //List<Integer> lista = new List<Integer>();// instanciando uma interface
     //<Integer> lista = new LinkedList<Integer>();
     lista.add(2);    
   }
}   

Obrigado. Generics tem sido um problema para mim. Quem puder ajudar também te uma dúvida em :
http://www.guj.com.br/posts/list/93342.java

Obrigado! :thumbup:

Usa-se a linguagem de Generics na assinatura dos métodos, não na sua implementação.

Não entendi.
Agora olhem :
:arrow: Esta linha compila normalmente:

Set <? extends Float> s = new TreeSet<Float>();

:arrow: Essa da erro de compilação

 List<? extends Object> lista = new ArrayList<Integer>();

:arrow: :arrow: Por que :?:

Ola,
Vamos por parte,

List<? extends Object> lista = new ArrayList<Integer>(); 

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 = new ArrayList<Integer>()

Em generics, nao existe polimorfismo.

List<? super Integer> lista = new ArrayList<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

Obrigado :thumbup:
Agora falta pouco :lol:

Recapitulando:

List lista = new ArrayList();   // Compila normalmente
List<? extends Object> lista = new ArrayList<Integer>();// A linhha compila. Mas levanta a questão abaixo
List<Integer> lista = new ArrayList<Integer>();  // Compila normalmente
ArrayList<Number> lista = new ArrayList<Integer>(); // Não compila. Polimorfismo não funciona com Generics.   
ArrayList<? extends Number> lista = new ArrayList<Integer>(); //  A linhha compila. Mas levanta a questão abaixo
List<? super Integer> lista = new ArrayList<Integer>();  // Compila normalmente
List<Integer> lista = new List<Integer>(); // Não Compila. Está instanciando uma interface.  
List  lista = new LinkedList<Integer>();  // Compila normalmente
List <Integer> lista  = new LinkedList<Integer>();  // Compila normalmente

Sendo que :

imagem maldita !!! Se não tiver aparecendo veja pelo caminho :

Então :

     ArrayList<? extends Number> lista = new ArrayList<Integer>(); 
     //ArrayList<? extends Object> lista = new ArrayList<Integer>(); //Compila normalmente
     //ArrayList<? extends Object> lista = new ArrayList<Number>();  //Compila normalmente
     //ArrayList<? extends Number> lista = new ArrayList<Object>(); //Essa linha dá pau devido o motivo abaixo
      /*
       A palavra reservada extends define tudo que esta a abaixo na sua 
       arvore de herança, inclusive a propria classe. 
      */
     
     List<? super Number > liste = new ArrayList<Object>();
     // List<? super Number> liste = new ArrayList<Integer>();//Essa linha dá pau devido o motivo abaixo
     /*
      A palavra reservada super define tudo que esta a acima na sua 
      arvore de herança, inclusive a propria classe. 
     */
     
     Object o = new Object();
     Integer i = new Integer(2);
     int in = 5;
     
     liste.add(i); // ok
     
     lista.add(i); //  Não funciona. PQ ?
     // liste.add(o); // Não funciona. PQ ?

Para concluir meu entendimento, por qual motivo as duas ultimas linhas(23,24) do código abaixo não compilam ?

Obrigado novamente. :thumbup: