Sobes.tech
Middle

Java'da Generics qanday imkoniyatlarni taqdim etadi?

sobes.tech AI

AIdan javob

Java-da Generics kodning tip xavfsizligini oshiradi va tip o‘zgartirish bilan bog‘liq ishga tushirishdagi xatoliklarni oldini oladi. Asosiy imkoniyatlar:

  • Konstruktsiya vaqtida tiplarni tekshirish: Kompilyator Genericsda ko‘rsatilgan tiplarning to‘g‘ri ishlatilishini tekshiradi, bu esa xatoliklarni dastur ishga tushirilishidan oldin aniqlash imkonini beradi.

    // Genericssiz - ClassCastException ehtimoli
    List list = new ArrayList();
    list.add("matn");
    list.add(123); // Integer qo‘shish
    String s = (String) list.get(1); // Ishga tushirishda xato
    
    // Generics bilan - kompilatsiya xatosi
    List<String> stringList = new ArrayList<>();
    stringList.add("matn");
    // stringList.add(123); // Kompilatsiya xatosi
    String str = stringList.get(0); // Xavfsiz olish
    
  • Tiplarni o‘zgartirish (type casting)ni yo‘q qilish: Generics kolleksiyalardan elementlarni olishda yoki parametrlangan sinflardan foydalanishda aniq tip o‘zgartirishga ehtiyoj qolmaydi.

    // Genericssiz
    List list = new ArrayList();
    list.add("Salom");
    String s = (String) list.get(0); // Aniq tip o‘zgartirish
    
    // Generics bilan
    List<String> stringList = new ArrayList<>();
    stringList.add("Salom");
    String str = stringList.get(0); // O‘zgartirish shart emas
    
  • Umumiy kodni amalga oshirish (Generics Methodlar, Generics Sinflar, Generics Interfeyslar): Turli tiplarda ishlaydigan umumiy algoritmlar va ma’lumotlar tuzilmalarini yaratishga imkon beradi, kodni takrorlamasdan.

    // Massivni chop etish uchun umumiy metod
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.print(element + " ");
        }
        System.out.println();
    }
    
    // Umumiy sinf - qiymat jufti
    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; }
    }
    
  • Wildcardsni qo‘llab-quvvatlash: Tiplar uchun moslashuvchan cheklovlar belgilash imkonini beradi.

    • ? (Cheksiz Wildcard): Har qanday tip.
    • ? extends T (O‘rta cheklovli Wildcard): Tip T yoki uning subtipi bo‘lishi kerak.
    • ? super T (Past cheklovli Wildcard): Tip T yoki uning supertipi bo‘lishi kerak.
    // Har qanday tipdagi ro‘yxatni qabul qiladigan metod
    public static void processList(List<?> list) {
        // ...
    }
    
    // Raqamlar yoki ularning subtiplarini qabul qiladigan metod
    public static void processNumbers(List<? extends Number> list) {
        // ...
    }
    
    // Matnlar yoki ularning supertiplarini qabul qiladigan metod
    public static void addStrings(List<? super String> list) {
        list.add("yangi matn");
    }
    
  • Collections Frameworkda foydalanish: Barcha asosiy kolleksiya sinflari (List, Set, Map va boshqalar) parametrlangan bo‘lib, kolleksiyalar bilan ishlashni tip xavfsiz va qulay qiladi.

Generics zamonaviy Java ning muhim elementidir, kodning ishonchliligini va o‘qilishi yaxshilaydi.