Co je to princip PECS a jak se používá v Java?
sobes.tech AI
Odpověď od AI
Princip PECS (Producer Extends Consumer Super) je mnemotechnické pravidlo, které určuje, kdy používat klíčová slova extends a super při práci s wildcard typy v generikách Java.
-
Producent (Producer): Pokud používáte generický parametr k získávání dat (extrahování prvků z kolekce), použijte wildcard s
extends. Kolekce funguje jako producent dat. Typ? extends Tznamená "libovolný typ, který jeTnebo jeho podtřídou". Můžete bezpečně číst prvky jako typT(nebo jeho nadtřídu), ale nemůžete přidávat prvky do takové kolekce (kroměnull). -
Konzument (Consumer): Pokud používáte generický parametr k přidávání dat (vkládání prvků do kolekce), použijte wildcard s
super. Kolekce funguje jako konzument dat. Typ? super Tznamená "libovolný typ, který jeTnebo jeho nadtřídou". Můžete bezpečně přidávat prvky typuT(nebo jeho podtříd), ale při čtení dostanete prvky jakoObject.
Použití v Java:
Používá se s wildcard typy (?) ke zvýšení flexibility API, které pracují s kolekcemi nebo jinými generickými typy, umožňujícími jim pracovat s širším rozsahem typů, přičemž zachovávají typovou bezpečnost.
Příklady:
// Příklad Producer
// Metoda printAll čte z List
public void printAll(List<? extends Number> list) {
// Můžeme číst prvky jako Number (nebo Object)
for (Number num : list) {
System.out.println(num);
}
// Nemůžeme přidávat prvky (kromě null)
// list.add(123); // Chyba kompilace
}
// Příklad Consumer
// Metoda addNumbers přidává do List
public void addNumbers(List<? super Integer> list) {
// Můžeme přidávat Integer nebo jeho podtřídy
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Chyba kompilace
// Při čtení dostaneme Object
Object o = list.get(0);
}