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.
[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 <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.
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…”