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): TipTyoki uning subtipi bo‘lishi kerak.? super T(Past cheklovli Wildcard): TipTyoki 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.