PECS ilkesi nedir ve Java'da nasıl uygulanır?
sobes.tech yapay zeka
AI'dan gelen yanıt
PECS prensibi (Producer Extends Consumer Super), Java jeneriklerinde wildcard tipleriyle çalışırken extends ve super anahtar kelimelerinin ne zaman kullanılacağını belirlemek için kullanılan akılda kalıcı bir kurallardır.
-
Üretici (Producer): Bir generic parametre kullanarak veri almak (koleksiyondan öğeleri çıkarmak) istiyorsanız,
extendsile wildcard kullanın. Koleksiyon, veri üreticisi olarak hareket eder.? extends Ttipi, "Tveya onun alt sınıfı olan herhangi bir tipi" ifade eder. Öğeleri güvenleTtipi (veya onun üst sınıfı) olarak okuyabilirsiniz, ancak böyle bir koleksiyona öğe ekleyemezsiniz (null hariç). -
Tüketici (Consumer): Bir generic parametre kullanarak veri ekmek (koleksiyona öğe koymak) istiyorsanız,
superile wildcard kullanın. Koleksiyon, veri tüketicisi olarak hareket eder.? super Ttipi, "Tveya onun üst sınıfı olan herhangi bir tipi" ifade eder. Bu koleksiyona güvenleTtipi (veya onun alt sınıfları) öğeleri ekleyebilirsiniz, ancak okuma sırasında öğeleriObjectolarak alırsınız.
Java'da Uygulama:
Wildcard tipleri (?) ile kullanılır, böylece koleksiyonlar veya diğer jenerik tiplerle çalışan API'lerin esnekliği artırılır, daha geniş bir tip yelpazesiyle çalışmasına izin verirken tip güvenliğini korur.
Örnekler:
// Producer örneği
// printAll metodu, List'ten okur
public void printAll(List<? extends Number> list) {
// Öğeleri Number (veya Object) olarak okuyabiliriz
for (Number num : list) {
System.out.println(num);
}
// Öğeleri ekleyemeyiz (null hariç)
// list.add(123); // Derleme hatası
}
// Consumer örneği
// addNumbers metodu, List'e ekler
public void addNumbers(List<? super Integer> list) {
// Integer veya alt sınıflarını ekleyebiliriz
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Derleme hatası
// Okuma sırasında Object alırız
Object o = list.get(0);
}