Generics
Daraja: O'rta
Generics kompilyatsiya vaqtida tur xavfsizligini beradi — `List<String>` ichiga tasodifan Integer tusha olmaydi va cast yozish shart emas. `<T>` — tur parametri. `? extends T` — o'qish uchun, `? super T` — yozish uchun (PECS qoidasi). Ish vaqtida turlar o'chiriladi (type erasure).
Tushuntirish
Generics kompilyatsiya vaqtida tur xavfsizligini beradi — `List<String>` ichiga tasodifan Integer tusha olmaydi va cast yozish shart emas. `<T>` — tur parametri. `? extends T` — o'qish uchun, `? super T` — yozish uchun (PECS qoidasi). Ish vaqtida turlar o'chiriladi (type erasure).
Kod misoli
class Quti<T> {
private T qiymat;
void sol(T q) { this.qiymat = q; }
T ol() { return qiymat; }
}
Quti<String> q = new Quti<>();
q.sol("Java");
static <T extends Comparable<T>> T engKatta(List<T> ro) {
T max = ro.get(0);
for (T e : ro) if (e.compareTo(max) > 0) max = e;
return max;
}
Keng tarqalgan xatolar
- `new T[10]` yozib bo'lmaydi — type erasure sababli generic massiv yaratilmaydi.
- Raw type ishlatish (`List list = ...`) generics'ning butun foydasini yo'q qiladi.
Mashqlar
- Generic `Juftlik<A, B>` klassini yoz.
- Ro'yxat elementlarini filtrlaydigan generic metod yoz.
Teglar: generics, tur