Sobes.tech
Middle+

Š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 T znači "bilo koji tip koji je T ili njegova podklasa". Možete sigurno čitati elemente kao tip T (ili njegovu superklasu), ali ne možete dodavati elemente u takvu kolekciju (osim null).

  • 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 T znači "bilo koji tip koji je T ili njegova superklasa". Možete sigurno dodavati elemente tipa T (ili njegove podklase) u takvu kolekciju, ali pri čitanju dobijate ih kao Object.

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