Sobes.tech
Middle

Ümumi sinifdə istifadə olunan parametr növünü işləmə zamanı necə müəyyən etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da, tiplərin silinməsi (type erasure) səbəbindən, generik siniflərin parametr tipləri haqqında məlumatlar tərtib zamanı bytecode-da saxlanmır, ona görə də işləmə zamanı parametr tipini birbaşa müəyyən etmək mümkün deyil.

Ancaq, bu məlumatları əldə etmək üçün bir neçə üsul mövcuddur:

  1. TypeToken sinfi və ya oxşar quruluşlardan istifadə etmək: Generik sinifin nümunəsini yaradarkən, Class<T> obyekti keçirmək və ya anonim alt sinif istifadə etmək vasitəsilə tip haqqında məlumatı saxlamaq olar.

  2. ParameterizedType istifadə edərək refleksiya: Əgər generik sinif, tip məlumatını sahə və ya konstruktor vasitəsilə saxlayırsa, onu refleksiya ilə əldə etmək mümkündür.

Class<T> ilə nümunə:

public class GenericClass<T> {
    private Class<T> type;

    public GenericClass(Class<T> type) {
        this.type = type;
    }

    public void printType() {
        System.out.println("Parametr tipi: " + type.getName());
    }
}

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Çıxış: Parametr tipi: java.lang.String

Beləliklə, işləmə zamanı parametr tipini müəyyən etmək üçün adətən onu açıq şəkildə keçirmək və ya saxlamaq lazımdır, çünki Java-nın standart mexanizmləri bunu tip silinməsi (type erasure) səbəbindən əldə etməyə imkan vermir.