Sobes.tech
Middle

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): Tip T veya onun alt tipi olmalı.
    • ? super T (Alt sınır Wildcard): Tip T veya 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.