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, extends və super 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 (exceptnull). -
? 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.