Šta je PECS princip i kako se primenjuje u Javi?
sobes.tech АИ
Одговор од АИ
PECS princip (Producer Extends Consumer Super) je mnemonik pravilo za odredjivanje kada koristiti ključne reči extends i super prilikom rada sa wildcard tipovima u Java generičkim tipovima.
-
Proizvođač (Producer): Kada koristite generički parametar za dobijanje podataka (izvlačenje elemenata iz kolekcije), koristite wildcard sa
extends. Kolekcija deluje kao proizvođač podataka. Tip? extends Tznači "bilo koji tip koji jeTili njegova podklasa". Možete sigurno čitati elemente kao tipT(ili njegovu superklasu), ali ne možete dodavati elemente u takvu kolekciju (osimnull). -
Potrošač (Consumer): Kada koristite generički parametar za dodavanje podataka (stavljenje elemenata u kolekciju), koristite wildcard sa
super. Kolekcija deluje kao potrošač podataka. Tip? super Tznači "bilo koji tip koji jeTili njegova superklasa". Možete sigurno dodavati elemente tipaT(ili njegove podklase) u takvu kolekciju, ali pri čitanju dobijate ih kaoObject.
Primena u Javi:
Koristi se sa wildcard tipovima (?) za povećanje fleksibilnosti API-ja koji rade sa kolekcijama ili drugim generičkim tipovima, omogućavajući im da rade sa širim spektrom tipova, uz očuvanje sigurnosti tipova.
Primeri:
// Primer Producer
// Metoda printAll čita iz List
public void printAll(List<? extends Number> list) {
// Možemo čitati elemente kao Number (ili Object)
for (Number num : list) {
System.out.println(num);
}
// Ne možemo dodavati elemente (osim null)
// list.add(123); // Greška pri kompilaciji
}
// Primer Consumer
// Metoda addNumbers dodaje u List
public void addNumbers(List<? super Integer> list) {
// Možemo dodavati Integer ili njegove podklase
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Greška pri kompilaciji
// Pri čitanju dobijamo Object
Object o = list.get(0);
}