Java'da Generics ne gibi imkanlar sağlar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java’daki Generics, kodun tip güvenliğini artırır ve tip dönüşümleriyle ilgili çalışma zamanında oluşabilecek hataları önler. Temel özellikler:
-
Derleme zamanında tip kontrolü: Derleyici, Generics ile belirtilen tiplerin doğru kullanımını denetler ve böylece program çalıştırılmadan önce hataları tespit eder.
// Generics olmadan - ClassCastException olası List list = new ArrayList(); list.add("dize"); list.add(123); // Bir Integer ekleniyor String s = (String) list.get(1); // Çalışma zamanı hatası // Generics ile - derleme hatası List<String> stringList = new ArrayList<>(); stringList.add("dize"); // stringList.add(123); // Derleme hatası String str = stringList.get(0); // Güvenli erişim -
Tip dönüşümlerinin (type casting) ortadan kaldırılması: Generics, koleksiyonlardan veya parametrik sınıflardan eleman alınırken açık tip dönüşümüne gerek kalmaz.
// Generics olmadan List list = new ArrayList(); list.add("Merhaba"); String s = (String) list.get(0); // Açık tip dönüşümü // Generics ile List<String> stringList = new ArrayList<>(); stringList.add("Merhaba"); String str = stringList.get(0); // Dönüşüm gerekmez -
Genel kodların uygulanması (Generics Metodlar, Generics Sınıflar, Generics Arabirimler): Farklı tiplerle çalışan genelleştirilmiş algoritmalar ve veri yapıları oluşturmaya olanak tanır, böylece kod tekrarını önler.
// Dizi yazdırmak için genel metod public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Genel sınıf - değer çifti class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } } -
Wildcards kullanımı: Tipler üzerinde esnek kısıtlamalar tanımlamaya olanak tanır.
?(Sınırsız Wildcard): Herhangi bir tip.? extends T(Üst sınır Wildcard): TipTveya onun alt tipi olmalı.? super T(Alt sınır Wildcard): TipTveya onun üst tipi olmalı.
// Herhangi bir tipteki listeyi kabul eden metod public static void processList(List<?> list) { // ... } // Sayıların veya alt tiplerinin listesini kabul eden metod public static void processNumbers(List<? extends Number> list) { // ... } // String veya onun üst tiplerinin listesini kabul eden metod public static void addStrings(List<? super String> list) { list.add("yeni dize"); } -
Collections Framework'te kullanımı: Tüm temel koleksiyon sınıfları (List, Set, Map vb.) parametrized olup, koleksiyonlarla çalışmayı tip güvenli ve kullanışlı hale getirir.
Generics, modern Java'nın anahtar unsurlarından olup, kodun güvenilirliğini ve okunabilirliğini artırır.