Qual é a diferença entre as palavras-chave extends e super ao usar generics em Java?
sobes.tech IA
Resposta da IA
Em Java, ao trabalhar com genéricos, as palavras-chave extends e super são usadas para restringir os tipos e influenciam a covariância e a contravariância.
-
? extends T— restrição superior (covariância). Permite usar o tipo T ou qualquer subclasse dele. Isso significa que é possível ler objetos do tipo T da coleção, mas não é possível adicionar objetos de forma segura a essa coleção (excetonull). -
? super T— restrição inferior (contravariância). Permite usar o tipo T ou qualquer superclasse dele. Isso significa que é possível adicionar objetos do tipo T à coleção, mas ao ler, só se pode obter objetos do tipo Object ou de um tipo mais geral.
Exemplo:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Pode ler como Number
// listExtends.add(10); // Erro de compilação
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Pode adicionar Integer
Object obj = listSuper.get(0); // Ao ler, o tipo é Object
Assim, extends é usado quando se precisa ler dados da estrutura, e super quando se precisa escrever dados.