&lt? super&gt duvida

3 respostas
LPJava

ae pessoal, pq <? super tipo> permite que seja adicionado ao conjunto e com extends nao eh permitido?

import java.util.*;
class Carnaval{}
class Banda extends Carnaval{}
class Chi{
	public void carna(List<? super Banda> band){
		band.add(new Banda());
	}
	public static void main(String [] agr){
		Chi ch = new Chi();
		List<Carnaval> lis = new ArrayList<Carnaval>();
			
		ch.carna(lis);
	}
}

:?:

3 Respostas

sergiolopes

Bom, vamos ver se eu não me confundo aqui… lá vai:

Primeiro: um método que recebe List&lt? super Banda&gt pode receber: List<Banda>, List<Carnaval> ou List<Object>. Ou seja, pode receber uma lista de qualquer coisa que é no máximo uma Banda.

Se você sabe que sua Lista, independente de qual for é uma lista de no máximo uma Banda, você pode colocar uma Banda lá dentro. Isso porque uma Banda é uma Banda, é um Carnaval e é um Object.

Mas, com o você não sabe o tipo especifico da Lista, se voce der um get voce recebera um Object (nao testei mas é o que faz mais sentido).

LPJava

mais pq com extends nao posso add na ao conjunto?

Paulo_Silveira

o ? extends Banda não pode adicionar porque a lista pode ser, por exemplo, uma lista de uma classe X que extends Banda. Ai se voce adicionar uma banda, vai quebrar o type safety que o generics da.

Criado 18 de fevereiro de 2007
Ultima resposta 19 de fev. de 2007
Respostas 3
Participantes 3