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ı:
-
?(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 } -
? 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 } -
?(Sınırsız Joker): Herhangi bir tipi ifade eder.? extends Objectile 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.