dúvidas Generics antes da prova

4 respostas
E

galera,

não sei se já é o cansaço mas me perdi no uso de genéricos. Não estou sabendo compreender a sua utilização nos métodos. Pelo livro da kathy entendi o seu uso geral bem superficial. Então espero que vocês consigam me ajudar:

Ex:

  1. Tenho a herança: Xa, Xb extends Xa, Xc extends Xb;

Método main:

Sink<Xa> s = null;
		Collection<Xb> cs = null;
		List<Xc> ls = null;
		
		
		Xa xc = writeAll(s, cs, ls); ----> erro de compilação. Por que? Se estou declarando que T é um Xa.

Método writeAll

public static <T extends Xa> T writeAll(Sink<T> s, Collection<T> cs, List<T>ls)
	{
	    T last = null;
	    
	    return last;
	}

Se alguém puder esclarecer o uso dessas declração em métodos, agradeço.

4 Respostas

ajfilho

efcjunior:
galera,

não sei se já é o cansaço mas me perdi no uso de genéricos. Não estou sabendo compreender a sua utilização nos métodos. Pelo livro da kathy entendi o seu uso geral bem superficial. Então espero que vocês consigam me ajudar:

Ex:

  1. Tenho a herança: Xa, Xb extends Xa, Xc extends Xb;

Método main:

Sink<Xa> s = null;
		Collection<Xb> cs = null;
		List<Xc> ls = null;
		
		
		Xa xc = writeAll(s, cs, ls); ----> erro de compilação. Por que? Se estou declarando que T é um Xa.

Método writeAll

public static <T extends Xa> T writeAll(Sink<T> s, Collection<T> cs, List<T>ls)
	{
	    T last = null;
	    
	    return last;
	}

Se alguém puder esclarecer o uso dessas declração em métodos, agradeço.

Se estiver errado, alguém me corrija, mas seu método writeAll acredito que deveria ficar assim, para atender sua requisição:

Sink<Xa> s = null;
		Collection<Xb> cs = null;
		List<Xc> ls = null;
		Xa xc = writeAll(s, cs, ls);

Método writeAll

public static <T extends Xa> T writeAll(Sink<T> s, Collection<T extends Xa> cs, List<T  extends Xa >ls)
	{
	    T last = null;
	    
	    return last;
	}
E

Legal Augusto. De fato desta forma está correta, mas não estou conseguindo a captar a lógica.

Por exemplo se eu chamasse este mesmo método e passasse somente um argumento, ele compilaria normalmente, porque não se tiver mais de um ? Por que precisa colocar extends ou super ?

ajfilho

Bom, vou tentar explicar da forma que sei, mas não sei se é a mais correta, fiquem a vontade para corrigir…

Quando você coloca essa linha:

o método writeAll vai ser do mesmo tipo da Referência, que no caso é Xa.

Então se você deixar a assinatura do método antiga, os parametros estarão todos parametrizados para o tipo Xa, entendeu??

Abraços!

E

Bom você chegou na minha dúvida. Se todos os parametros ficarão como Xa e todos os argumentos passados “is a” “Xa” qual é o problema ?

Criado 22 de setembro de 2009
Ultima resposta 22 de set. de 2009
Respostas 4
Participantes 2