Umumiy sinfda ishlatiladigan parametr turini bajarilish vaqtida qanday aniqlash mumkin?
sobes.tech AI
AIdan javob
Java'da, turlarning silinishi (type erasure) sababli, generik sinflarning parametr turlariga oid ma'lumotlar kompilyatsiya vaqtida bytecode'da saqlanmaydi, shuning uchun ularni ish vaqtida to'g'ridan-to'g'ri aniqlash mumkin emas.
Ammo, bu ma'lumotlarni olish uchun bir nechta usullar mavjud:
-
TypeTokensinfi yoki shunga o'xshash konstruktsiyalarni ishlatish: Generik sinfning nusxasini yaratishda,Class<T>ob'ektini o'tkazish yoki anonim subklassdan foydalanish orqali tur haqida ma'lumotni saqlash mumkin. -
ParameterizedTypeyordamida refleksiya qilish: Agar generik sinf, tur haqida ma'lumotni maydon yoki konstruktor orqali saqlasa, uni refleksiya yordamida olish mumkin.
Class<T> bilan misol:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Parametr turi: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Chiqish: Parametr turi: java.lang.String
Shuning uchun, ish vaqtida parametr turini aniqlash uchun odatda uni aniq o'tkazish yoki saqlash talab qilinadi, chunki Java ning standart mexanizmlari buni turlarning silinishidan (type erasure) sababli olishga ruxsat bermaydi.