როგორ შეიძლება განსაზღვრო გენერიკულ კლასში გამოყენებული პარამეტრის ტიპი პროგრამის შესრულების დროს?
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-ի ստանդարտ մեխանիզմները դա թույլ չեն տալիս տիպերի ջնջման պատճառով.