Dúvida exercício do livro Kathy Sierra (tipo de retorno genérico)

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…

Da uma olhada nesse link:

http://www.guj.com.br/posts/list/66983.java#352505

:wink:

Valeu aê man. Vc teve a mesma dúvida que eu :wink:
Com as discussões lá do tópico consegui analisar e entender a questão.

obrigado…