Modül dersleri (2/2)
Java'daki jenerikler
Jenerikler (Genel Türler), sınıfların, arayüzlerin ve yöntemlerin parametre olarak farklı türler üzerinde çalışmasına olanak sağlamak için Java'da kullanıma sunuldu. Bu, derleme zamanı türünün güvenliğini sağlar ve çalışma zamanında pahalı açık yayınları önler.
Genel Sınıflar
Genel bir sınıf, <T> köşeli ayraçlar kullanılarak tanımlanır; burada T, sınıf başlatıldığında belirtilecek bir tür için yer tutucu görevi görür.
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}Bir Box nesnesi oluştururken gerçek türü belirtiriz:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!Genel Yöntemler
Farklı tür parametrelerini kabul edebilen tek bir genel yöntem tanımlayabilirsiniz. Type parametresi, yöntemin dönüş türünden önce yerleştirilir.
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}Joker Karakterler ve Sınırlı Türler
Belirli bir türü veya onun alt sınıflarını kabul etmek için extends anahtar sözcüğünü (üst sınır) kullanarak bir jenerik tarafından kabul edilen türleri kısıtlayabiliriz.
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}Kendin dene
T'yi döndüren getValue() alıcısını ve özel değişken değerini ayarlayan setValue(T value) ayarlayıcısını tanımlayarak genel Box sınıfını tamamlayın.
İpucu göster
Genel tür parametresi 'T'yi kullanarak yöntemleri doğru imzayla yazın.
3 denemeden sonra çözüm mevcut
Dizi adlı T[] türünde bir diziyi alan ve her öğeyi for-each döngüsü kullanarak yazdıran statik bir genel yöntem printArray oluşturun.
İpucu göster
"<T>" tür parametresi "statik"ten hemen sonra ve "void" dönüş türünden önce yerleştirilmelidir.
3 denemeden sonra çözüm mevcut
String ile parametrelendirilmiş Container arayüzünü uygulayan statik bir StringContainer sınıfı oluşturun. String parametresi alan bir yapıcı tanımlayın ve getItem() yöntemini uygulayın.
İpucu göster
Sınıf imzasında ve "getItem()" dönüş türünde "T" genel türünü "String" ile değiştirin.
3 denemeden sonra çözüm mevcut