Video: Wildcards in Java Generics | why to use upper bounded,Lower bounded and Unbounded Wildcards 2024
Java, programlamanın mükemmel bir yoludur, ancak bazen yaratıcılık kazanmanız gerekir. Bunu yapmak için, joker karakterli parametreleri kullanabilirsiniz.
public void addItems (ArrayList listesi)
{
// gövde metodu gösterilmez
}
Düşünülen soru: Aşağıdaki deyim derlenir mi?
addItems (new ArrayList ());
Cevap: Hayır.
String
,
Nesne
alt türü olduğundan şaşırtıcıdır. Yani bir
ArrayList
nesnesinin kabul ettiği söylenen bir parametrenin bir
ArrayList
dizesinin kabul ettiğini düşünürsünüz.
Ne yazık ki, kalıtsal tür parametreleri söz konusu olduğunda miras o kadar da işe yaramaz. Bunun yerine, joker karakter olarak adlandırılan jeneriklerin başka bir özelliğini kullanmak zorunda kalırsınız.
Kısacası, herhangi bir
ArrayList
türünü kabul eden bir yöntem oluşturmak isterseniz yöntemi şöyle kodlamanız gerekir:
public void addItems (ArrayList list)
Bu durumda soru işareti, her tür türünü burada kodlayabildiğinizi gösterir.
Bu neredeyse kalıtım kadar iyidir, ancak aslında parametreyi belirli bir süper sınıfın koleksiyonlarıyla sınırlamak isterseniz? Örneğin,
HourlyEmployee
ve
SalariedEmployee
olmak üzere iki alt sınıfa sahip bir
Çalışan
üst sınıfına sahip olan bir bordro sistemi üzerinde çalıştığınızı ve bu yöntemin kabul etmesini istediğinizi varsayalım
Çalışanlar
nesneleri,
Saatlik Çalışan
nesneleri veya
SalariedEmployee
nesneleri olan bir
ArrayList
?
Bu durumda, joker karakteri bir
genişletilmiş
yan tümcesi ekleyebilirsiniz:
public void addItems (ArrayList listesi)
Çalışan
,
Saatlik Çalışan
veya
SalariedEmployee
türündeki
ArrayList
öğesine sahip
addItems
yöntemini kullanın.
Şimdi, bir gün aramadan önce bu örneği bir adım daha ileri alınız: Bu
addItems
yöntemi, öğelerin türünü belirtmek için resmi bir tür parametresi
kullanan genel bir sınıfta göründüğünü varsayalım. sınıfı kabul eder ve
addItems
yönteminin
ArrayList
türünde
E
veya alt sınıflarından herhangi birini kabul etmesini istemezsiniz. Bunu yapmak için,
addItems
yöntemini şöyle ilan etmiş olursunuz:
public void addItems (ArrayList listesi)
Burada, joker karakter türü
parametresi basitçe
ArrayList <
E
türünden veya
E
olan herhangi bir türden olabilir.