Чӣ гуна метавон намудҳои параметрро, ки дар синфи умумӣ истифода мешаванд, дар вақти иҷрои барнома муайян кард?
sobes.tech AI
Ҷавоб аз AI
Дар Java, бо сабаби нобуд кардани намудҳо (type erasure) дар вақти компайл, маълумоти дар бораи намудҳои параметрҳои синфҳои генерикӣ дар байткод нигоҳ дошта намешавад, бинобар ин, муайян кардани намуди параметр дар вақти иҷрои мустақиман имконнопазир аст.
Бо вуҷуди ин, чанд роҳ барои гирифтани ин маълумот вуҷуд дорад:
-
Истифодаи синфи
TypeTokenё сохторҳои монанд: Ҳангоми сохтани нусхаи синфи генерикӣ, шумо метавонед объектClass<T>-ро гузаронед ё аз синфи анонимӣ истифода баред, то маълумоти намудро нигоҳ доред. -
Рефлексия бо истифодаи
ParameterizedType: Агар синфи генерикӣ маълумоти намудро дар майдон ё конструктор нигоҳ дорад, онро тавассути рефлексия гирифтан мумкин аст.
Масалан бо гузаронидани Class<T>:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Намуди параметр: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Натиҷа: Намуди параметр: java.lang.String
Аз ҳамин сабаб, барои муайян кардани намуди параметр дар вақти иҷро, одатан зарур аст, ки онро ба таври ошкор гузаронед ё нигоҳ доред, зеро механизмҳои стандартии Java имкон намедиҳанд, ки онро бо сабаби нобуд кардани намудҳо ба даст оранд.