Sobes.tech
Junior — Middle

Java'da generiklardan foydalanishda extends va super kalit so'zlari qanday farq qiladi?

sobes.tech AI

AIdan javob

Java'da generiklerle işləyərkən, extendssuper açar sözləri tipləri məhdudlaşdırmaq üçün istifadə olunur və kovariantlıq və kontravariantlıq üzərində təsir göstərir.

  • ? extends T — yuxarı məhdudiyyət (kovariantlıq). T və onun hər hansı alt sinfi ilə istifadə etməyə imkan verir. Bu, kolleksiyadan T tipli obyektləri oxumağa imkan verir, lakin bu cür kolleksiyaya təhlükəsiz şəkildə obyektlər əlavə etmək mümkün deyil (except null).

  • ? super T — aşağı məhdudiyyət (kontravariantlıq). T və onun hər hansı üst sinfi ilə istifadə etməyə imkan verir. Bu, T tipli obyektləri kolleksiyaya əlavə etməyə imkan verir, lakin oxuma zamanı yalnız Object və ya daha ümumi tipli obyektlər əldə edə bilərsiniz.

Misal:

List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Number kimi oxumaq olar
// listExtends.add(10); // Tənqid xətası

List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Integer əlavə etmək olar
Object obj = listSuper.get(0); // Oxuma zamanı, tip Object-dir

Beləliklə, extends strukturdan məlumat oxumaq üçün istifadə olunur, super isə məlumat yazmaq üçün.