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ənComparable-ı 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.