Sobes.tech
Middle

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): Tip T və ya onun alt tipi olmalıdır.
    • ? super T (Aşağı sərhəd Wildcard): Tip T və 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.