Sobes.tech
Middle

Generics nədir və onlar nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da Generics, parametrizə olunmuş tiplərlə işləyən siniflər, interfeyslər və metodlar yaratmağa imkan verir.

Generics-in əsas məqsədi:

  • Tip təhlükəsizliyinin artırılması: Kompilyator, tipləri tərtib zamanı yoxlayır və ClassCastException-u işləmə zamanı qarşısını alır.
  • Tip çevirmələrini aradan qaldırmaq: Koleksiyalardan elementləri çıxararkən əl ilə tip çevirməyə ehtiyac yoxdur.
  • Daha çevik və təkrar istifadə olunan kodun yaradılması: Müxtəlif məlumat tiplərinə tətbiq oluna bilən ümumi alqoritmlər və məlumat strukturları yaza bilərsiniz.

Generics olmadan nümunə:

// Java 5-dən əvvəl
import java.util.ArrayList;
import java.util.List;

public class OldStyleList {
    public static void main(String[] args) {
        List list = new ArrayList(); // tip təyin olunmayıb
        list.add("salam");
        list.add(123); // hər hansı obyekt əlavə edilə bilər

        String s = (String) list.get(0); // tip çevirmə tələb olunur
        Integer i = (Integer) list.get(1); // tip çevirmə tələb olunur

        // Tip çevirmə xətası baş verə bilər
        // String error = (String) list.get(1); // ClassCastException
        System.out.println(s);
        System.out.println(i);
    }
}

Generics ilə nümunə:

// Generics istifadə edərək
import java.util.ArrayList;
import java.util.List;

public class GenericList {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(); // sətir siyahısı
        list.add("salam");
        // list.add(123); // tərtib xətası - Integer əlavə edilə bilməz

        String s = list.get(0); // tip çevirməyə ehtiyac yoxdur

        // Başqa tip əlavə etmək mümkün deyil, xətaları qarşısını alır
        // List<Integer> intList = new ArrayList<>();
        // intList.add("dünya"); // tərtib xətası
        System.out.println(s);
    }
}

Generics həmçinin aşağıdakı sahələrdə istifadə olunur:

  • Siniflər: ArrayList<E>, HashMap<K, V>
  • Interfeyslər: List<E>, Map<K, V>
  • Metodlar: <T> void printArray(T[] array)
  • Tip məhdudiyyətləri: <T extends Comparable<T>> (müqayisə edilə bilən Comparable-ı implement edən tiplərlə məhdudlaşır)

Java-da Generics-in tətbiqi, "tip silmə" (type erasure) əsasında qurulmuşdur. Bu, generik tiplər haqqında məlumatların silindiyi və işləmə zamanı JVM-in xam tiplərlə işlədiyi anlamına gəlir. Bu, köhnə Java versiyaları ilə uyğunluğu təmin edir, lakin bəzi məhdudiyyətləri var.