Duvida em Generico

2 respostas
P

Na pag. 358, cap. 7, Exercicio 16.
O código:

public static<E extends Number> List<? super E> process(List<E> nums)

//INSIRA AS DECLARAÇÕES AQUI

output = process(input);

As respostas corretas são:

B

ArrayList<Integer> input = null;
List<Integer> output = null;

E

List<Number> input = null;
List<Number> output = null;

F

List<Integer> input = null;
List<Integer> output = null;

Enfim, eu gostaria de saber por que a C:

ArrayList<Integer> input = null;
List<Number> output = null;

está incorreta.
P.S.:open_mouth: código só precisa compilar.

2 Respostas

L

Na real pelos meus testes nenhuma dessas funcionou.

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

Esse método deveria receber como parâmetro algo que estende um Number e retornar algo que é super do tipo da lista que foi passada por parâmetro. Algo que é super quer dizer que ele pode retornar new ArrayList<Object>(), porém nenhum output desses pode receber um List<Object>, logo todos estão errados (sempre da erro de compilação).
Agora qual critério dai eles usaram para dizer que essas letras estão certas, não sei.

De qualquer forma, todas questões “certas” compilariam se vc colocasse <? super …> no tipo output. Porém na letra C que vc não entendeu, não daria certo porque mesmo colocando em output algo como <? super Number> ao invés de <Number>, daria erro pois o retorno do método passando um List<Integer> seria List<? super Integer>, logo daria para eu retornar um List<Integer> o que não caberia em um List<? super Number>.

Seila, espero que tenha ajudado

P

Ajudou sim, agora eu entendi.
Vlw

Criado 14 de janeiro de 2008
Ultima resposta 14 de jan. de 2008
Respostas 2
Participantes 2