Sobes.tech
Middle+

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 T tipas reiškia "bet kuris T arba jo pogrupis". Galite saugiai skaityti elementus kaip T (arba jo viršutinę klasę), bet negalite pridėti elementų į tokią kolekciją (išskyrus null).

  • Consumer (Vartotojas): Kai naudojate gijų parametrą duomenų pridėjimui (elementų įdėjimui į kolekciją), naudokite wildcard su super. Kolekcija veikia kaip duomenų vartotojas. ? super T tipas reiškia "bet kuris T arba jo superklasės". Galite saugiai pridėti T tipo elementų (arba jo pogrupius), bet skaitydami gausite juos kaip Object.

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);
}