Middle+
Чӣ гуна нест кардани намудҳо дар Java аст?
sobes.tech AI
Ҷавоб аз AI
Затиронии намудҳо (type erasure) — ин раванд дар Java мебошад, ки дар он маълумоти дар бораи намудҳо дар марҳилаи компилятсия ҳазф карда мешавад, ва коди байтшудаи компилятшуда маълумоти дар бораи параметрҳои генерикро дар бар намегирад.
Мавзӯъҳои асосӣ:
- Мувофиқат: Имкон медиҳад, ки генерикҳо бо коди кӯҳнаи бе истифодаи генерикҳо кор кунанд.
- Иҷро: Компилятор намудҳои параметриро бо ҳадди болоии онҳо (одатан
Object) иваз мекунад ва табдилоти заруриро ворид мекунад. - Маҳдудиятҳо:
- Намудҳои primitives ҳамчун параметрҳои генерикӣ истифода намешаванд (масалан,
List<int>). - Масиви намудҳои параметрӣ сохтан мумкин нест (масалан,
new List<String>[10]). - Оператор
instanceofбарои санҷиши намудҳои параметрӣ истифода намешавад (масалан,if (list instanceof List<String>)). - Методҳоро бо намудҳои параметрӣ, агар имзоҳои онҳо пас аз ҳазф мувофиқат кунанд, такрор кардан мумкин нест.
- Намудҳои primitives ҳамчун параметрҳои генерикӣ истифода намешаванд (масалан,
Масалан:
// Коди манбаъ бо генерикҳо
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Ниҳояш ниёз ба табдилоти равшан нест
// Байткод пас аз ҳазфи намудҳо
List list = new ArrayList(); // Навъи List<String> бо навъи List иваз шудааст
list.add("hello");
String s = (String)list.get(0); // Табдилоти ғайрирасмӣ ворид шудааст
Ҳатто бо маҳдудиятҳо, затиронии намудҳо як ҷузъи асосии татбиқи генерикҳо дар Java мебошад, ки мутобиқатпазирии пасгумаро таъмин мекунад.