Čo je to princíp PECS a ako sa v Jave používa?
sobes.tech AI
Odpoveď od AI
Princíp PECS (Producer Extends Consumer Super) je mnemotechnické pravidlo na určenie, kedy používať kľúčové slová extends a super pri práci s wildcard typmi v generikách Java.
-
Producent (Producer): Keď používate generický parameter na získavanie dát (extrahovanie prvkov z kolekcie), použite wildcard s
extends. Kolekcia funguje ako producent dát. Typ? extends Tznamená "akýkoľvek typ, ktorý jeTalebo jeho podtriedou". Môžete bezpečne čítať prvky ako typT(alebo jeho supertriedu), ale nemôžete pridávať prvky do takejto kolekcie (okremnull). -
Konzument (Consumer): Keď používate generický parameter na pridávanie dát (vkladanie prvkov do kolekcie), použite wildcard s
super. Kolekcia funguje ako konzument dát. Typ? super Tznamená "akýkoľvek typ, ktorý jeTalebo jeho supertriedou". Môžete bezpečne pridávať prvky typuT(alebo jeho podtriedy) do takejto kolekcie, ale pri čítaní ich dostanete akoObject.
Použitie v Jave:
Používa sa s wildcard typmi (?) na zvýšenie flexibility API, ktoré pracujú s kolekciami alebo inými generickými typmi, umožňujúc im pracovať s širším rozsahom typov, pričom zachovávajú typovú bezpečnosť.
Príklady:
// Príklad Producer
// Metóda printAll číta z List
public void printAll(List<? extends Number> list) {
// Môžeme čítať prvky ako Number (alebo Object)
for (Number num : list) {
System.out.println(num);
}
// Nemôžeme pridávať prvky (okrem null)
// list.add(123); // Chyba kompilácie
}
// Príklad Consumer
// Metóda addNumbers pridáva do List
public void addNumbers(List<? super Integer> list) {
// Môžeme pridávať Integer alebo jeho podtriedy
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Chyba kompilácie
// Pri čítaní dostaneme Object
Object o = list.get(0);
}