Olá pessoal,
estou há um bom tempo estudando para a certificação com o livro do Kathy Sierra e tenho algumas dúvidas em relação a genéricos.
É o seguinte:
na questão 16 do capítulo 7 tem a seguinte pergunta:
public static <E extends Number> List<? super E> process(List<E> nums)
// insira as declarações aqui
output = process(input);
Daí pede para adicionar pares de declarações para permitir a compilação do código.
Dentre elas tem umas que eu achava que estão correta, mas estão erradas.
Essas respostas (duvidosas) são:
A. ArrayList<Integer> input = null;
ArrayList<Integer> output = null;
B. (entendí)
C. ArrayList<Integer> input = null;
List<Number> output = null;
D. List<Number> input = null;
ArrayList<Integer> output = null;
Na correção diz que o tipo de retorno do processo é declarado definitivamente como um List e não um ArrayList de modo que A e D estão erradas.
dúvida:
porque isso está errado, pois ArrayList é um List?
Na outra correção diz que C está errada pq o tipo de retorno resulta em um List, que não pode ser atribuido a uma variável do tipo List.
dúvida:
quando ele declava List<? super E>, isso indica que o tipo de retorno poderá ser qq classe à cima de E (que neste caso é Integer, logo poderia valer, pois Number é um bupertipo de Integer), não é?. Pq isto não está correto.
Se poderem me ajudar, agradeço.
valeu…