Avatar ·

O que é PECS (Producer Extends Consumer Super) em genéricos Java?

Olá a todos! Já escrevo em Java há alguns meses, mas ainda me confundo com wildcards em genéricos. Li sobre PECS, mas na prática ainda não entendo quando usar `? extends T` e quando usar `? super T`. Aqui está um exemplo concreto que me deixa confuso. Tenho um método que deve copiar elementos de uma lista para outra: ```java public static void copy(List src, List dest) { for (Object item : src) { dest.add(item); // Erro de compilação! } } ``` O compilador reclama de `dest.add(item)`. Entendo que preciso usar bounded wildcards, mas não consigo entender quais exatamente. Suponha que eu tenha uma hierarquia de classes: `Animal` → `Dog` → `Puppy`. Quero escrever um método que: 1. Leia objetos de uma lista (por exemplo, uma lista de `Dog`) 2. Escreva-os em outra lista (por exemplo, uma lista de `Animal`) Como declarar corretamente os tipos para `src` e `dest`? E o que essa sigla PECS significa? Agradeço por uma explicação detalhada com exemplos.