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 Ttips 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ņemotnull). -
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 Ttips nozīmē "jebkurš T vai tā superklase". Droši var pievienotTtipu 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);
}