Odak modu
Wildcard Nedir?
Java'da wildcards (joker karakterler), jenerik türlerin parametrelerinde belirli bir türü belirtmek yerine daha genel bir tür veya türler aralığı kullanmayı sağlar. Bu özellik, jenerikler ile daha esnek ve genel kod yazmayı mümkün kılar.
Wildcard, tür parametrelerinin yerine kullanılan özel bir türdür ve genellikle ? sembolü ile temsil edilir. ?, herhangi bir türü temsil eder ve türlerin belirli sınırlarla tanımlanmasına imkan tanır. Wildcard kullanımı, jeneriklerle çalışırken daha genel ve esnek kod yazmanızı sağlar.
Wildcard Türleri:
Unbounded Wildcard (?)
Bu, herhangi bir türü temsil eder. Yani, herhangi bir türdeki nesnelerle işlem yapılabilir. Ancak, sınırlama olmadığı için bu türle sadece bazı işlemler yapılabilir.
public class WildcardExample {
public static void printList(List<?> list) {
for (Object obj : list) {
System.out.println(obj);
}
}
}
Burada, List<?> ifadesi, herhangi bir türdeki listeyi alabileceğimizi gösterir.
Upper Bounded Wildcard (? extends T)
Bu, belirli bir türün alt sınıflarını veya türevlerini ifade eder. Yani, belirli bir türün alt türleri ile işlem yapılabilir. Bu tür, T türünün alt sınıflarını kabul eder.
public class WildcardExample {
public static void printNumbers(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}
}
Burada, List<? extends Number> ifadesi, Number sınıfı veya Number sınıfından türetilmiş türleri (örneğin, Integer, Double) içeren listeleri kabul eder.
Lower Bounded Wildcard (? super T)
Bu, belirli bir türün üst sınıflarını ifade eder. Yani, belirli bir türün veya daha genel türlerin üst türleri ile işlem yapılabilir. Bu tür, T türünden türetilmiş nesnelerin üst sınıflarını kabul eder.
public class WildcardExample {
public static void addNumbers(List<? super Integer> list) {
list.add(10);
list.add(20);
}
}
Burada, List<? super Integer> ifadesi, Integer sınıfı veya Integer sınıfından türetilmiş sınıfların üst sınıflarını kabul eder (örneğin, Number ve Object sınıfları).
Wildcard Kullanımının Faydaları:
Esneklik: Wildcard kullanarak, farklı türleri kabul eden metodlar yazabilirsiniz. Bu, kodunuzun daha esnek olmasını sağlar.
Yüksek Genellik: Wildcard'lar, belirli türler arasında esnek bir geçiş sağlar, böylece farklı türlerdeki koleksiyonlarla işlem yapabilirsiniz.
Sınıf Hiyerarşisi: Wildcard, tür hiyerarşilerini göz önünde bulundurarak sadece belirli türler ve alt türleriyle işlem yapmanıza imkan tanır.
Wildcard ile İlgili Kısıtlamalar:
Yazma: ? extends T wildcard ile bir koleksiyona öğe ekleyemezsiniz, çünkü öğenin türünü kesin olarak bilemezsiniz. Ancak ? super T wildcard ile yazma yapılabilir.
Okuma: ? extends T wildcard ile okumak mümkündür, çünkü türün bir alt türünü temsil eder, ancak türü genel olarak kabul eder.
Örnekler:
Unbounded Wildcard:
import java.util.*;
public class WildcardExample {
public static void printList(List<?> list) {
for (Object obj : list) {
System.out.println(obj);
}
}
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "cherry");
List<Integer> integers = Arrays.asList(1, 2, 3);
printList(strings); // Çıktı: apple, banana, cherry
printList(integers); // Çıktı: 1, 2, 3
}
}
Upper Bounded Wildcard:
import java.util.*;
public class WildcardExample {
public static void printNumbers(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1, 2, 3);
List<Double> doubles = Arrays.asList(1.1, 2.2, 3.3);
printNumbers(integers); // Çıktı: 1, 2, 3
printNumbers(doubles); // Çıktı: 1.1, 2.2, 3.3
}
}
Lower Bounded Wildcard:
import java.util.*;
public class WildcardExample {
public static void addNumbers(List<? super Integer> list) {
list.add(10);
list.add(20);
}
public static void main(String[] args) {
List<Number> numbers = new ArrayList<>();
addNumbers(numbers);
System.out.println(numbers); // Çıktı: [10, 20]
}
}
Sektörde en çok aranan yazılım becerilerini kazan
Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.
Yunus Emre Kabakcı
Patika+ mezunuPatika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,
3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!
“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“
Yorum yapabilmek için derse kayıt olmalısın!