Java-da Generics hansı imkanları təqdim edir?
sobes.tech Süni İntellekt
AI-dan cavab
Java-da Generics kodun tip təhlükəsizliyini artırır və tip çevirmə ilə əlaqəli icra zamanı səhvlərin qarşısını alır. Əsas imkanlar:
-
Kompilyasiya mərhələsində tip yoxlaması: Kompilyator Generics-də göstərilən düzgün tip istifadəsini yoxlayır və bu, proqramın işə salınmasından əvvəl səhvləri aşkar etməyə imkan verir.
// Generics olmadan - ClassCastException ehtimalı List list = new ArrayList(); list.add("sətir"); list.add(123); // Integer əlavə edir String s = (String) list.get(1); // İcra zamanı səhv // Generics ilə - kompilyasiya xətası List<String> stringList = new ArrayList<>(); stringList.add("sətir"); // stringList.add(123); // Kompilyasiya xətası String str = stringList.get(0); // Təhlükəsiz əldə etmə -
Tip çevirmələrini (type casting) aradan qaldırmaq: Generics kolleksiyalardan elementləri əldə edərkən və ya parametrli siniflərdən istifadə edərkən açıq tip çevirməsinə ehtiyac qalmır.
// Generics olmadan List list = new ArrayList(); list.add("Salam"); String s = (String) list.get(0); // Açıq tip çevirmə // Generics ilə List<String> stringList = new ArrayList<>(); stringList.add("Salam"); String str = stringList.get(0); // Çevirmə lazım deyil -
Ümumi kodların tətbiqi (Generics Methodlar, Generics Sinflər, Generics Interfeyslər): Müxtəlif tiplərlə işləyən ümumi alqoritmlər və məlumat strukturları yaratmağa imkan verir, kodu təkrarlamadan.
// Array-i çap etmək üçün ümumi metod public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } // Ümumi sinif - dəyər cütü 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 dəstəyi: Tiplər üçün elastik məhdudiyyətlər təyin etməyə imkan verir.
?(Sərhədsiz Wildcard): Hər hansı tip.? extends T(Yuxarı sərhəd Wildcard): TipTvə ya onun alt tipi olmalıdır.? super T(Aşağı sərhəd Wildcard): TipTvə ya onun supertipi olmalıdır.
// Hər hansı tipli siyahını qəbul edən metod public static void processList(List<?> list) { // ... } // Rəqəmlər və ya onların alt tiplərini qəbul edən metod public static void processNumbers(List<? extends Number> list) { // ... } // Sətirlər və ya onların super tiplərini qəbul edən metod public static void addStrings(List<? super String> list) { list.add("yeni sətir"); } -
Collections Framework-də istifadə: Bütün əsas kolleksiya sinifləri (List, Set, Map və s.) parametrli olub, kolleksiyalarla işləməni tip təhlükəsiz və rahat edir.
Generics müasir Java-nın əsas elementidir, kodun etibarlılığını və oxunaqlılığını artırır.