Sobes.tech
Middle+

Mis on PECS põhimõte ja kuidas seda Java-s rakendada?

sobes.tech AI

Vastus AI-lt

PECS printsiip (Producer Extends Consumer Super) on mnemooniline reegel, mis määrab, millal kasutada extends ja super võtmesõnu Java generiliste wildcard-tüüpide töötamisel:

  • Producer (Tootja): Kui kasutate gendertüüpi parameetrit andmete saamiseks (elementide välja võtmine kogust), kasutage wildcard koos extends. Kogum toimib andmete tootjana. ? extends T tüüp tähendab "ükskõik milline T või selle alamklass". Saate turvaliselt lugeda elemente kui T (või selle ülemklass), kuid ei saa sellesse kogusse elemente lisada (välja arvatud null).

  • Consumer (Tarbij): Kui kasutate gendertüüpi parameetrit andmete lisamiseks (elementide lisamine kogusse), kasutage wildcard koos super. Kogum toimib andmete tarbijana. ? super T tüüp tähendab "ükskõik milline T või selle superklass". Saate turvaliselt lisada T tüüpi elemente (või selle alamklasse), kuid lugedes saate neid Objectina.

Java kasutamine:

Kasutatakse wildcard-tüüpe (?), et suurendada API paindlikkust, töötades kogumitega või teiste gendertüüpidega, võimaldades neil töötada laiemas tüüpide vahemikus, säilitades samal ajal tübiturvalisuse.

Näited:

// Producer näide
// printAll meetod loeb Listist
public void printAll(List<? extends Number> list) {
    // Võime lugeda elemente Numberina (või Objectina)
    for (Number num : list) {
        System.out.println(num);
    }
    // Ei saa lisada elemente (välja arvatud null)
    // list.add(123); // Kompilatsiooni viga
}

// Consumer näide
// addNumbers meetod lisab Listi
public void addNumbers(List<? super Integer> list) {
    // Võime lisada Integer või selle alamklasse
    list.add(1);
    list.add(new Integer(2));
    // list.add(new Double(3.0)); // Kompilatsiooni viga

    // Lugedes saame Objecti
    Object o = list.get(0);
}