Kas yra PECS principas ir kaip jis taikomas Java?
sobes.tech AI
Atsakymas iš AI
PECS principas (Producer Extends Consumer Super) — tai mnemoninė taisyklė, skirta nustatyti, kada naudoti extends ir super raktinius žodžius Java generinių wildcard tipų darbo metu:
-
Producer (Gamybininkas): Kai naudojate gijų parametrą duomenų gavimui (elementų iš kolekcijos išgavimui), naudokite wildcard su
extends. Kolekcija veikia kaip duomenų gamintojas.? extends Ttipas reiškia "bet kuris T arba jo pogrupis". Galite saugiai skaityti elementus kaipT(arba jo viršutinę klasę), bet negalite pridėti elementų į tokią kolekciją (išskyrusnull). -
Consumer (Vartotojas): Kai naudojate gijų parametrą duomenų pridėjimui (elementų įdėjimui į kolekciją), naudokite wildcard su
super. Kolekcija veikia kaip duomenų vartotojas.? super Ttipas reiškia "bet kuris T arba jo superklasės". Galite saugiai pridėtiTtipo elementų (arba jo pogrupius), bet skaitydami gausite juos kaipObject.
Java naudojimas:
Naudojama su wildcard tipais (?), siekiant padidinti API lankstumą, dirbant su kolekcijomis ar kitais generiniais tipais, leidžiant jiems dirbti su platesniu tipų diapazonu, išlaikant tipų saugumą.
Pavyzdžiai:
// Producer pavyzdys
// printAll metodas skaito iš List
public void printAll(List<? extends Number> list) {
// Galime skaityti elementus kaip Number (arba Object)
for (Number num : list) {
System.out.println(num);
}
// Negalime pridėti elementų (išskyrus null)
// list.add(123); // Kompiliatoriaus klaida
}
// Consumer pavyzdys
// addNumbers metodas prideda į List
public void addNumbers(List<? super Integer> list) {
// Galime pridėti Integer arba jo pogrupius
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Kompiliatoriaus klaida
// Skaitydami gausime Object
Object o = list.get(0);
}