Imagem de fundo

O Polimorfismo Paramétrico em Java, implementado via Generics, utiliza o mecanismo de T...

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:


Imagem associada para resolução da questão


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

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.


B

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.


C

A chamada do método utilizando registrarAnimais(new ArrayList());, uma vez que Cachorro é um tipo compatível com a hierarquia de Animal.


D

A atribuição List lista = new ArrayList(); é inválida, pois o tipo genérico deve ser obrigatoriamente Animal ou um de seus descendentes.


E

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.