Sobes.tech
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]).
    • instanceof operatoridan parametrlangan turdagi tekshirish uchun foydalanib bo‘lmaydi (masalan, if (list instanceof List<String>)).
    • Agar ularning imzolari mos kelsa, metodlarni overload qilish mumkin emas.

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.