Generics: Tip Güvenliği Sağlayan Kod Yazım Teknikleri

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16
Java Generics: Esnek ve Güvenli Kod



1. Neden Generics Kullanmalıyız?​


Generics kullanmanın iki temel amacı vardır:

Tip Güvenliği: Yanlış veri tipi eklenmesini derleme (compile) aşamasında fark etmek.

Casting İşleminden Kurtulma: Veriyi çekerken sürekli (String) veya (Integer) gibi dönüşümler yapmamak.

Java:
// Generics OLMADAN (Eski Usul)
List liste = new ArrayList();
liste.add("Merhaba");
String s = (String) liste.get(0); // Manuel casting şart!

// Generics İLE (Modern Usul)
List<String> liste = new ArrayList<>();
liste.add("Merhaba");
String s = liste.get(0); // Casting gerektirmez, tip güvenlidir.

2. Generic Sınıf Tanımlama​


Bir sınıfı generic yapmak için sınıf adının yanına elmas operatörü < > içinde bir tip parametresi ekleriz. Genellikle şu harfler tercih edilir:

T: Type (Genel tip)

E: Element (Koleksiyon elemanları)

K / V: Key / Value (Map yapıları için)

Java:
public class Depo<T> {
private T veri;

public void ekle(T veri) { this.veri = veri; }
public T getir() { return veri; }

}

// Kullanım:
Depo<Integer> sayiDeposu = new Depo<>();
sayiDeposu.ekle(10);

3. Generic Metotlar​


Tüm sınıfı generic yapmadan, sadece belirli bir metodu farklı tiplerle çalışacak şekilde tasarlayabilirsiniz.

Java:
public static <E> void diziYazdir(E[] dizi) {
for (E eleman : dizi) {
System.out.print(eleman + " ");
}
}

4. Bounded Types (Sınırlandırılmış Tipler)​


Bazen her tipi kabul etmek istemezsiniz. Örneğin, sadece sayısal (Number) sınıfları kabul eden bir yapı kurmak için extends anahtar kelimesini kullanırız.

Java:
// Sadece Integer, Double, Float gibi sayısal sınıfları kabul eder
public class Hesaplayici<T extends Number> {
// ...
}

5. Wildcards (Joker Karakterler: ?)​


Bilinmeyen bir tipi temsil etmek için ? işareti kullanılır. Üç farklı kullanım senaryosu vardır:

<?> (Unbounded): Herhangi bir tip.

<? extends T> (Upper Bounded): T sınıfı veya T'den türetilmiş herhangi bir sınıf. (Okuma işlemleri için ideal).

<? super T> (Lower Bounded): T sınıfı veya T'nin üst sınıfları. (Yazma işlemleri için ideal).

6. Tip Silme (Type Erasure)​


Önemli bir teknik detay: Java'da Generics sadece derleme aşamasında mevcuttur. Kod derlendikten sonra, Java geriye dönük uyumluluk için tüm generic tipleri siler ve onları Object (veya sınırlandırılmışsa o sınıfa) dönüştürür. Buna "Type Erasure" denir.



Sonuç

Generics, Java'nın daha modern ve hatasız bir dil haline gelmesini sağlayan en kritik özelliklerden biridir. Kendi generic yapılarınızı oluşturmak, kütüphane seviyesinde esnek ve tip güvenli mimariler kurmanıza olanak tanır.
 
Geri
Üst