3-modul · 2-dars: Generics

Daraja: O'rta

Generics. Exception va Collections bo‘yicha nazariya, amaliy namuna va mustaqil mashq.

Tushuntirish

## Dars maqsadi Generics tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.

## Nazariya Class, interface va methodlarni tur (type) parametri bilan yozish imkoni — masalan `List<String>`. Turni parametrlashtiradi.

Compile vaqtida tur xavfsizligi, keraksiz cast dan xalos bo'lish va kodni qayta ishlatish.

## Intervyuga tayyorgarlik ### Generiklar nima? Class, interface va methodlarni tur (type) parametri bilan yozish imkoni — masalan `List<String>`. Turni parametrlashtiradi.

### Generiklarning foydali tomonlari? Compile vaqtida tur xavfsizligi, keraksiz cast dan xalos bo'lish va kodni qayta ishlatish.

### Generiklarni qayerlarda e'lon qila olamiz? Class, interface, method va constructor darajasida.

### Generic va Object o'rtasida nima farqi bor? Object bilan cast kerak va xato faqat runtime da chiqadi. Generic bilan tur compile vaqtida tekshiriladi, cast kerak emas.

### Single Bounds nima? Tur parametrini bitta yuqori chegara bilan cheklash: `<T extends Number>`.

### Bound Typelardan nima uchun foydalanamiz? Tur parametrini muayyan class/interface bilan cheklab, uning methodlaridan foydalanish uchun.

### Qanday Bounds turlari bor? Upper bound (`extends`) va lower bound (`super`, wildcard da); shuningdek single va multiple bounds.

### Multiple Bounds nima? Bir necha chegara: `<T extends Number & Comparable<T>>` (avval class, keyin interfacelar).

### Type Erasure nima? Kompilyatsiyada generic tur ma'lumoti o'chiriladi (bytecode da `Object` yoki bound ga almashadi). Runtime da generic tur mavjud emas.

### Type Erasure methodda ham sodir bo'ladimi? Ha, generic method parametrlari ham erase bo'lib, bound (yoki `Object`) ga almashadi.

### Raw type nima? Generic classni tur parametrisiz ishlatish: `List list = new ArrayList();`. Eski kod bilan moslik uchun, lekin xavfsiz emas.

### Warnings nima? Kompilyatorning «unchecked» kabi ogohlantirishlari — xato emas, lekin xavf (masalan raw type ishlatilganda).

### Raw typelarni ishlatishdan nima uchun qochish kerak? Tur xavfsizligi yo'qoladi va runtime da `ClassCastException` xavfi paydo bo'ladi.

### Generiklarda qanday cheklovlar mavjud? Primitive tur parametri bo'lolmaydi; `new T()` yaratib bo'lmaydi; generic array yaratib bo'lmaydi; static field generic bo'lolmaydi; `instanceof` generic tur bilan ishlamaydi.

### Generiklarda vorislik bilan ishlaganda qanday qoida bor? `List<String>` `List<Object>` ning subtype-i EMAS (invariant). Moslashuv uchun wildcard (`? extends`, `? super`) kerak.

### SuperClass typedagi arrayga subclass arrayini o'zlashtira olamizmi? Array-larda ha (covariant): `Object[] a = new String[3];`. Lekin bu runtime da `ArrayStoreException` xavfini keltiradi; generiklar esa buni taqiqlaydi.

## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.

## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/3-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/api/collections-framework/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)

Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.

Kod misoli

record Box<T>(T value) {}
// Box<String> box = new Box<>("Java");
// String value = box.value();

Keng tarqalgan xatolar

Mashqlar

Teglar: nazariya, modul-03, pdp

Interaktiv ko'rinish (viktorina, izohlar, tarix)