Extends e Super

Por que o metodo : public <T extends Integer> List<T> go(){return new ArrayList<T>();}
compila, sendo que este: public <T super Integer> List<T> go(){return new ArrayList<T>();}
não compila?

a palavra reservada super é utilizada para uma chamada oa construtor da superclasse e extends é utilizado para dizer quem é a superclasse.

Opa, obrigado pela resposta. Mas eu estou perguntando isso no contexto de generico. :grin:

[quote=“Pilon”]Por que o metodo : public <T extends Integer> List<T> go(){return new ArrayList<T>();}
compila, sendo que este: public <T super Integer> List<T> go(){return new ArrayList<T>();}
não compila?[/quote]

Ola,

Existem regras básicas para o generics… vc pode forçar que se tenha um tipo básico, como <T extends Integer> quer dizer que, eu terei algo que no minimo seja um Integer, o que seria descer na árvore da hierarquia… mas vc não pode querer forçar que se tenha um tipo mais generico, <T super Integer> vc quer dizer que, eu terei algo que Integer estende… não faz sentido, neste caso vc estaria tentando subir na hierarquia…

Obs: Agora só pra constar… não da erro de complicação vc fazer <T extends Integer>, mas Integer é uma classe final… logo vc não pode estente-la.

[quote=“Pilon”]Por que o metodo : public &lt;T extends Integer&gt; List&lt;T&gt; go&#40;&#41;&#123;return new ArrayList&lt;T&gt;&#40;&#41;;&#125;
compila, sendo que este: public &lt;T super Integer&gt; List&lt;T&gt; go&#40;&#41;&#123;return new ArrayList&lt;T&gt;&#40;&#41;;&#125;
não compila?[/quote]

Ola,

Existem regras básicas para o generics… vc pode forçar que se tenha um tipo básico, como <T extends Integer> quer dizer que, eu terei algo que no minimo seja um Integer, o que seria descer na árvore da hierarquia… mas vc não pode querer forçar que se tenha um tipo mais generico, <T super Integer> vc quer dizer que, eu terei algo que Integer estende… não faz sentido, neste caso vc estaria tentando subir na hierarquia…

Obs: Agora só pra constar… não da erro de complicação vc fazer <T extends Integer>, mas Integer é uma classe final… logo vc não pode estente-la.

Desculpa mas entendi mesmo… não entendi porque não faz sentido subir na hierarquia…

e outra coisa, a sintaxe do <T super Integer> aceita o próprio Integer não? Porque no livro da kathy 2 edição pág 340 tá escrito: “Quando usa a sintaxe super você está dizendo ao compilador que pode aceitar o tipo que está no lado direito de super ou qualquer um dos seus supertipos…”