Sobes.tech
Middle+

¿Qué es el principio PECS y cómo se aplica en Java?

sobes.tech AI

Respuesta de la IA

El principio PECS (Producer Extends Consumer Super) es una regla mnemónica para determinar cuándo usar las palabras clave extends y super al trabajar con tipos comodín en genéricos de Java.

  • Productor (Producer): Cuando utilizas un parámetro genérico para obtener datos (extraer elementos de una colección), usa un comodín con extends. La colección actúa como un productor de datos. El tipo ? extends T significa "cualquier tipo que sea T o su subclase". Puedes leer elementos de forma segura como tipo T (o su superclase), pero no puedes agregar elementos a dicha colección (excepto null).

  • Consumidor (Consumer): Cuando utilizas un parámetro genérico para agregar datos (poner elementos en una colección), usa un comodín con super. La colección actúa como un consumidor de datos. El tipo ? super T significa "cualquier tipo que sea T o su superclase". Puedes agregar de forma segura elementos de tipo T (o sus subclases) a dicha colección, pero al leer elementos los obtendrás como Object.

Aplicación en Java:

Se usa con tipos comodín (?) para aumentar la flexibilidad de las API que trabajan con colecciones u otros tipos genéricos, permitiendo que funcionen con un rango más amplio de tipos, manteniendo la seguridad de tipos.

Ejemplos:

// Ejemplo Productor
// El método printAll lee de una List
public void printAll(List<? extends Number> list) {
    // Podemos leer elementos como Number (o Object)
    for (Number num : list) {
        System.out.println(num);
    }
    // No podemos agregar elementos (excepto null)
    // list.add(123); // Error de compilación
}

// Ejemplo Consumidor
// El método addNumbers agrega a una List
public void addNumbers(List<? super Integer> list) {
    // Podemos agregar Integer o sus subclases
    list.add(1);
    list.add(new Integer(2));
    // list.add(new Double(3.0)); // Error de compilación

    // Al leer, obtenemos Object
    Object o = list.get(0);
}