Genéricos (Respondido)

9 respostas
anderson.bonavides

Dado um metedo declarado como:
public static List<? super E> process(List nums)

Um progrma deseja usar esse método da seguinte forma:

//INSIRA AS DECLARAÇÕES AQUI.

output = process(input);

a) ArrayList input = null;
ArrayList output = null;

b) ArrayList input = null;
List output = null;

c) ArrayList input = null;
List output = null;

d) List input = null;
ArrayList output = null;

e) List input = null;
ArrayList output = null;

e) List input = null;
List output = null;

B, E e F estão correas.

Alguêm poderia me dar uma força, não entendi a conclusão da resposta.

9 Respostas

B

Cara, estou estudando pra certificação e tinha exatamente essa pergunta no capitulo 7. Nenhuma das alternativas batia, resolvi procurar no google, e achei sua dúvida, sem resposta alguma :frowning:

Continuei pesquisando e pelo que me pareçe é um erro do livro, a pergunta certa é:
public static List process(List nums)

note que ao invés de List<? super E> como diz o livro, a pergunta original é List

fonte: http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=24&t=030902

Att,

anderson.bonavides

Eu vou dar uma olhada no assunto novamente e posto em seguida.
=]

vlw pela dica.

LPJava
anderson.bonavides:
Dado um metedo declarado como: public static List process(List nums)

Um progrma deseja usar esse método da seguinte forma:

//INSIRA AS DECLARAÇÕES AQUI.

output = process(input);
--------------------------------------------------------------------------------------
a) ArrayList input = null;
ArrayList output = null;

b) ArrayList input = null;
List output = null;

c) ArrayList input = null;
List output = null;

d) List input = null;
ArrayList output = null;

e) List input = null;
ArrayList output = null;

e) List input = null;
List output = null;

B, E e F estão correas.

Alguêm poderia me dar uma força, não entendi a conclusão da resposta.

po pegadinha isso ai..to analisando aqui o codigo a 30min e a conclusao que cheguei: e a pegadinha é aqui
output = process(input);
a invaliado. por que? observe o tipo de retorno do metodo é um List e e to fazendo na letra a algo tipo isso:
ArrayList  =  List
isso nao pode certo?

b nao há problema aqui. qual o problema de List receber um ArrayList?

c os tipos sao diferentes entao nao posso ter:
List<Number> = ArrayList<Integer>

[b]d[/b] mesmo problema acima

[b]e,f[/b] não problemas nenhum

cara essa questao que sabero o uso de genericos mais ainda se saber  o funcionamento de tipo.. so q ele usou a complexidade ao infinito...
se ele fizesse assim:
[code]
List<Integer> list = new ArrayList<Number>();
vc ia marcar logo de cara nao compila.. hehe.. entao ele quer prova se vc sabe a regra de genericos em codigos mais complexos.. hehe mata o cara. uma questao dessa eu fazia no papel como aconteceu la.. tee questao que tive que fazer linha a linha no papel.. sempre vai ter umas 2 ou 3 questoes q vai ter usar o papel, devido as pegadinhas desse tipo.. se eu tiver errado nas respostas acima me corrigam.. mais foi o que eu conseguir tirar da questao olhando.. o pq que as outras estavam erradas e essa estavam certas...

flw!!

B

Na verdade, nenhuma dessas alternativas está certa, justamente por causa do retorno:
public static List<? super E> process(List nums)

O tipo de retorno está muito genérico…

G

anderson.bonavides:
Dado um metedo declarado como:
public static List<? super E> process(List nums)

Um progrma deseja usar esse método da seguinte forma:

//INSIRA AS DECLARAÇÕES AQUI.

output = process(input);

a) ArrayList input = null;
ArrayList output = null;

b) ArrayList input = null;
List output = null;

c) ArrayList input = null;
List output = null;

d) List input = null;
ArrayList output = null;

e) List input = null;
ArrayList output = null;

e) List input = null;
List output = null;

B, E e F estão correas.

Alguêm poderia me dar uma força, não entendi a conclusão da resposta.

Galera: E extends Number. List<? super E> quer dizer que o retorno tem que ser do tipo NUMBER.
eliminando assim as respostas a, b, d, f.

as respostas corretas são c , e

[]s
Gunnar

B

impossivel!!! faça o teste e tente compilar, você com certeza não vai conseguir…

G

Fiz alguns testes…
não sei porque não funciona. Mas o problema é com a declaração de output.
Se o output for declarado sem usar Generics funciona.

package Generics;

import java.util.*;

public class Guj{

	public static <E extends Number> List<? super E> process(List<E> list){
		return new ArrayList<Number>();
	}

	public static void main(String[] args){
		
		ArrayList<Integer> input = null; 
		List output = null; 
		output = process(input);

	}

}

Eu, na prova, marcaria as opções (c , e) de qualquer forma.
E pode ser de QUALQUER tipo. E só tem uma super classe comum a todos os Objetos…a classe OBJECT. Só que se tentar declarar List output = null; não compila. Só funciona se não usar Generics para output…(o que é o mesmo que List output).

[]s
Gunnar

B

Na verdade a unica resposta plausivel seria List<?> l = output ou List l = output, como voce disse

Mais o que aconteçe é que essa pergunta está no livro da Kathy Sierra. Segundo o livro a resposta certa seria as alternativas B, E e F. O QUE É UMA MENTIRA.
Caso você leia a o topico desde o começo, verá que a discussão é justamente sobre isso, um erro do livro, nenhuma dessas alternativas está correta. Segundo informações a pergunta certa seria:

public static [color=red]List[/color] process(List nums)

O Problema é com a PERGUNTA, não com as respostas :wink:

anderson.bonavides

Depois de muito estudar e analizar consegui compreender onde tava o erro. É verdade o erro se econtra na sintaxe do método e não nas respostas.

Criado 16 de agosto de 2007
Ultima resposta 8 de jan. de 2008
Respostas 9
Participantes 4