Sobes.tech
Middle

Java'da wildcard nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da ? joker karakteri, genellikle generic'lerde bilinmeyen bir tipi temsil etmek için kullanılır. Farklı uyumlu türlere sahip koleksiyonlarla, belirli bir tüle sıkı sıkıya bağlı kalmadan çalışmaya olanak tanır.

Ana kullanım senaryoları:

  1. ? (Yukarı Sınırlı Joker): Belirtilen sınıf veya arayüzü miras alan veya uygulayan herhangi bir tipi ifade eder. Koleksiyondan veri okuma için kullanılır. Örnek: List<? extends Number> List<Integer>, List<Double> içerebilir, .getList<Long>.

    // Üst sınır ile koleksiyondan okuma
    public void processNumbers(List<? extends Number> numbers) {
        for (Number n : numbers) {
            System.out.println(n);
        }
        // numbers.add(new Integer(10)); // Derleme hatası - öğe eklenemez
    }
    
  2. ? super (Aşağı Sınırlı Joker): Belirtilen sınıf veya arayüzün bir üst sınıfını veya kendisini ifade eder. Kolejiğe veri yazmak için kullanılır (PECS prensibi: Üretici extends, Tüketici super). Örnek: List<? super Integer> List<Integer>, List<Number>, List<Object> içerebilir.

    // Aşağı sınır ile koleksiyona ekleme
    public void addIntegers(List<? super Integer> list) {
        list.add(1);
        list.add(new Integer(2));
        // Object o = list.get(0); // Object döndürür, çünkü kesin tip bilinmiyor
    }
    
  3. ? (Sınırsız Joker): Herhangi bir tipi ifade eder. ? extends Object ile eşdeğerdir. Koleksiyonun öğelerinin gerçek tipi önemli değilse kullanılır, örneğin boyut kontrolü veya temizleme için.

    // Herhangi bir tipte koleksiyonla çalışma
    public void printList(List<?> list) {
        for (Object obj : list) {
            System.out.println(obj);
        }
        // list.add("hello"); // Derleme hatası - öğe eklenemez (null hariç)
    }
    

Wildcards, kodun esnekliğini artırır, metodların daha geniş koleksiyon türleriyle çalışmasına olanak tanır ve tip güvenliğini korur. Bu sayede, farklı ancak uyumlu koleksiyon türleri üzerinde aynı işlemleri yapan metodlar için kod tekrarını önleyebilir.