Middle
Generics nedir ve ne amaçla kullanılırlar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da Generics, parametreli türlerle çalışan sınıflar, arayüzler ve metodlar oluşturmayı sağlar.
Generics'in temel amacı:
- Tür güvenliğinin artırılması: Derleyici, derleme zamanında türleri kontrol eder ve çalışma zamanında
ClassCastException'ı engeller. - Tür dönüşümlerinin ortadan kaldırılması: Koleksiyonlardan öğeleri çıkarırken manuel tür dönüşümüne gerek kalmaz.
- Daha esnek ve yeniden kullanılabilir kod oluşturma: Farklı veri türlerine uygulanabilen genel algoritmalar ve veri yapıları yazılabilir.
Generics olmadan örnek:
// Java 5 öncesi
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // tür belirtilmemiş
list.add("merhaba");
list.add(123); // herhangi bir nesne eklenebilir
String s = (String) list.get(0); // tür dönüşümü gerekir
Integer i = (Integer) list.get(1); // tür dönüşümü gerekir
// Tür dönüşüm hatası olabilir
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Generics ile örnek:
// Generics kullanımıyla
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // string listesi
list.add("merhaba");
// list.add(123); // derleme hatası - Integer eklenemez
String s = list.get(0); // tür dönüşümüne gerek yok
// Başka bir tür eklenemez, hataları önler
// List<Integer> intList = new ArrayList<>();
// intList.add("dünya"); // derleme hatası
System.out.println(s);
}
}
Generics ayrıca şu alanlarda kullanılır:
- Sınıflar:
ArrayList<E>,HashMap<K, V> - Arayüzler:
List<E>,Map<K, V> - Metodlar:
<T> void printArray(T[] array) - Tür kısıtlamaları:
<T extends Comparable<T>>(Comparable'ı uygulayan türlerle sınırlı)
Java'da Generics'in uygulanması, derleme zamanında "Tür silme" (type erasure) temel alınarak yapılır. Bu, jenerik türler hakkında bilgilerin kaldırıldığı ve çalışma zamanında JVM'nin ham türlerle çalıştığı anlamına gelir. Bu, eski Java sürümleriyle uyumluluğu sağlar, ancak bazı sınırlamaları vardır.