Middle+
Java'da turlarni o'chirish nima?
sobes.tech AI
AIdan javob
Type erasure (turlarni yo‘q qilish) Java'da, turlar haqida ma'lumotlar kompilatsiya bosqichida o‘chiriladigan jarayon bo‘lib, kompilyatsiya qilingan bayt-kod generik parametrlar haqida ma'lumotni o‘z ichiga olmaydi.
Asosiy nuqtalar:
- Moslik: Bu generiklarning eski kod bilan ishlashiga imkon beradi, u generiklarni ishlatmaydi.
- Amalga oshirish: Kompilyator parametrlangan turlarni ularning yuqori chegarasi (odatda
Object) bilan almashtiradi va kerakli turlarni konvertatsiya qilishlarni qo‘shadi. - Cheklovlar:
- Primitiv turlar generik parametr sifatida ishlatilmaydi (masalan,
List<int>). - Parametrlangan turdagi massiv yaratib bo‘lmaydi (masalan,
new List<String>[10]). instanceofoperatoridan parametrlangan turdagi tekshirish uchun foydalanib bo‘lmaydi (masalan,if (list instanceof List<String>)).- Agar ularning imzolari mos kelsa, metodlarni overload qilish mumkin emas.
- Primitiv turlar generik parametr sifatida ishlatilmaydi (masalan,
Misol:
// Generiklar bilan manba kodi
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Aniq konvertatsiya talab qilinmaydi
// Turlar o‘chirilgandan keyingi bayt-kod
List list = new ArrayList(); // List<String> o‘rniga List
list.add("hello");
String s = (String)list.get(0); // Ko‘rinmas konvertatsiya qo‘shilgan
Cheklovlarga qaramay, turlarni o‘chirish Java'da generiklarning asosiy jihati bo‘lib, orqaga mos keluvchanlikni ta'minlaydi.