Czym jest zasada PECS i jak jest stosowana w Java?
sobes.tech AI
Odpowiedź od AI
Zasada PECS (Producer Extends Consumer Super) to mnemotechniczna zasada określająca, kiedy używać słów kluczowych extends i super podczas pracy z typami wildcard w generykach Java.
-
Producent (Producer): Gdy używasz parametru generycznego do pobierania danych (wyciągania elementów z kolekcji), użyj wildcard z
extends. Kolekcja działa jako producent danych. Typ? extends Toznacza "dowolny typ, który jestTlub jego podklasą". Możesz bezpiecznie odczytywać elementy jako typT(lub jego superklasę), ale nie możesz dodawać elementów do takiej kolekcji (z wyjątkiemnull). -
Konsument (Consumer): Gdy używasz parametru generycznego do dodawania danych (wstawiania elementów do kolekcji), użyj wildcard z
super. Kolekcja działa jako konsument danych. Typ? super Toznacza "dowolny typ, który jestTlub jego superklasą". Możesz bezpiecznie dodawać elementy typuT(lub jego podklas) do takiej kolekcji, ale podczas odczytu otrzymasz je jakoObject.
Zastosowanie w Java:
Używa się z wildcard-typami (?), aby zwiększyć elastyczność API pracujących z kolekcjami lub innymi typami generycznymi, pozwalając im działać na szerszym zakresie typów, zachowując jednocześnie bezpieczeństwo typów.
Przykłady:
// Przykład Producer
// Metoda printAll odczytuje z List
public void printAll(List<? extends Number> list) {
// Możemy odczytywać elementy jako Number (lub Object)
for (Number num : list) {
System.out.println(num);
}
// Nie możemy dodawać elementów (z wyjątkiem null)
// list.add(123); // Błąd kompilacji
}
// Przykład Consumer
// Metoda addNumbers dodaje do List
public void addNumbers(List<? super Integer> list) {
// Możemy dodawać Integer lub jego podklasy
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Błąd kompilacji
// Podczas odczytu otrzymujemy Object
Object o = list.get(0);
}