Avatar ·

¿Qué es PECS (Producer Extends Consumer Super) en los genéricos de Java?

¡Hola a todos! Llevo varios meses programando en Java, pero todavía me confundo con los wildcards en los genéricos. Leí sobre PECS, pero en la práctica sigo sin entender cuándo usar `? extends T` y cuándo usar `? super T`. Aquí hay un ejemplo concreto que me desconcierta. Tengo un método que debe copiar elementos de una lista a otra: ```java public static void copy(List src, List dest) { for (Object item : src) { dest.add(item); // ¡Error de compilación! } } ``` El compilador se queja de `dest.add(item)`. Entiendo que necesito usar bounded wildcards, pero no puedo entender cuáles exactamente. Supongamos que tengo una jerarquía de clases: `Animal` → `Dog` → `Puppy`. Quiero escribir un método que: 1. Lea objetos de una lista (por ejemplo, una lista de `Dog`) 2. Los escriba en otra lista (por ejemplo, una lista de `Animal`) ¿Cómo declaro correctamente los tipos para `src` y `dest`? ¿Y qué significa realmente esta abreviatura PECS? Agradecería una explicación detallada con ejemplos.