Sobes.tech
Middle+

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, extends ile wildcard kullanın. Koleksiyon, veri üreticisi olarak hareket eder. ? extends T tipi, "T veya onun alt sınıfı olan herhangi bir tipi" ifade eder. Öğeleri güvenle T tipi (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, super ile wildcard kullanın. Koleksiyon, veri tüketicisi olarak hareket eder. ? super T tipi, "T veya onun üst sınıfı olan herhangi bir tipi" ifade eder. Bu koleksiyona güvenle T tipi (veya onun alt sınıfları) öğeleri ekleyebilirsiniz, ancak okuma sırasında öğeleri Object olarak 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);
}