¿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 Tsignifica "cualquier tipo que seaTo su subclase". Puedes leer elementos de forma segura como tipoT(o su superclase), pero no puedes agregar elementos a dicha colección (exceptonull). -
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 Tsignifica "cualquier tipo que seaTo su superclase". Puedes agregar de forma segura elementos de tipoT(o sus subclases) a dicha colección, pero al leer elementos los obtendrás comoObject.
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);
}