

Seu próximo nível começa aqui
Seu desenvolvimento não pode ter limites. Garanta sua Assinatura Ilimitada e libere uma preparação completa com os melhores professores do Brasil.
O Polimorfismo Paramétrico em Java, implementado via Generics, utiliza o mecanismo de Type Erasure para manter a compatibilidade com versões legadas da JVM. Esse mecanismo impõe restrições à variância dos tipos. Para lidar com isso, a linguagem utiliza coringas (wildcards) com limites superiores (extends) e inferiores (super). Para a questão, considere o método apresentado:

Com base nas regras de covariância e contravariância, assinale a alternativa que apresenta uma operação tecnicamente válida, assumindo que a classe Cachorro herda explicitamente da classe Animal.
A instrução lista.add(new Object()); dentro do método, já que Object é um supertipo de Animal e, portanto, compatível com o limite inferior definido.
A instrução Animal a = lista.get(0); dentro do método, visto que o limite inferior garante que todos os elementos da lista sejam, no mínimo, do tipo Animal.
A chamada do método utilizando registrarAnimais(new ArrayList());, uma vez que Cachorro é um tipo compatível com a hierarquia de Animal.
A atribuição List lista = new ArrayList(); é inválida, pois o tipo genérico deve ser obrigatoriamente Animal ou um de seus descendentes.
A instrução lista.add(new Cachorro()); dentro do escopo do método, pois o wildcard ? super Animal garante que a lista pode aceitar com segurança instâncias de Animal ou de qualquer uma de suas subclasses.