O que é o princípio PECS e como é aplicado em Java?
sobes.tech IA
Resposta da IA
O princípio PECS (Producer Extends Consumer Super) é uma regra mnemónica para determinar quando usar as palavras-chave extends e super ao trabalhar com tipos curinga em genéricos Java.
-
Produtor (Producer): Quando utilizas um parâmetro genérico para obter dados (extrair elementos de uma coleção), usa um curinga com
extends. A coleção atua como um produtor de dados. O tipo? extends Tsignifica "qualquer tipo que sejaTou sua subclasse". Podes ler elementos com segurança como tipoT(ou sua superclasse), mas não podes adicionar elementos a tal coleção (excetonull). -
Consumidor (Consumer): Quando utilizas um parâmetro genérico para adicionar dados (colocar elementos numa coleção), usa um curinga com
super. A coleção atua como um consumidor de dados. O tipo? super Tsignifica "qualquer tipo que sejaTou sua superclasse". Podes adicionar elementos de tipoT(ou suas subclasses) a tal coleção, mas ao leres elementos, vais obtê-los comoObject.
Aplicação em Java:
Usa-se com tipos curinga (?) para aumentar a flexibilidade das APIs que trabalham com coleções ou outros tipos genéricos, permitindo que funcionem com um intervalo mais amplo de tipos, mantendo a segurança de tipos.
Exemplos:
// Exemplo Produtor
// O método printAll lê de uma List
public void printAll(List<? extends Number> list) {
// Podemos ler elementos como Number (ou Object)
for (Number num : list) {
System.out.println(num);
}
// Não podemos adicionar elementos (exceto null)
// list.add(123); // Erro de compilação
}
// Exemplo Consumidor
// O método addNumbers adiciona a uma List
public void addNumbers(List<? super Integer> list) {
// Podemos adicionar Integer ou suas subclasses
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Erro de compilação
// Ao ler, obtemos Object
Object o = list.get(0);
}