Sobes.tech
Middle+

Kas ir PECS princips un kā tas tiek piemērots Java?

sobes.tech AI

Atbilde no AI

PECS princips (Producer Extends Consumer Super) — tas ir mnemonisks noteikums, lai noteiktu, kad jāsāk izmantot extends un super atslēgvārdus Java ģenerisko wildcard tipu darbā:

  • Producer (Ražotājs): Kad izmantojat ģenerisko parametru datu iegūšanai (elementu izvilkšanai no kolekcijas), izmantojiet wildcard ar extends. Kolekcija darbojas kā datu ražotājs. ? extends T tips nozīmē "jebkurš T vai tā apakšklase". Droši var lasīt elementus kā T (vai tā virsējo klasi), bet nevar pievienot elementus šādai kolekcijai (izņemot null).

  • Consumer (Patērētājs): Kad izmantojat ģenerisko parametru datu pievienošanai (elementu ievietošanai kolekcijā), izmantojiet wildcard ar super. Kolekcija darbojas kā patērētājs. ? super T tips nozīmē "jebkurš T vai tā superklase". Droši var pievienot T tipu elementus (vai tā apakšklases), bet lasot saņemsiet tos kā Object.

Java izmantošana:

Izmanto ar wildcard tipiem (?), lai palielinātu API elastību, strādājot ar kolekcijām vai citiem ģeneriskiem tipiem, ļaujot tiem darboties ar plašāku tipu diapazonu, saglabājot tipu drošību.

Piemēri:

// Producer piemērs
// printAll metode lasa no List
public void printAll(List<? extends Number> list) {
    // Varam lasīt elementus kā Number (vai Object)
    for (Number num : list) {
        System.out.println(num);
    }
    // Nevaram pievienot elementus (izņemot null)
    // list.add(123); // Kompilācijas kļūda
}

// Consumer piemērs
// addNumbers metode pievieno List
public void addNumbers(List<? super Integer> list) {
    // Varam pievienot Integer vai tā apakšklases
    list.add(1);
    list.add(new Integer(2));
    // list.add(new Double(3.0)); // Kompilācijas kļūda

    // Lasot saņemam Object
    Object o = list.get(0);
}