Каква е разликата между ключовите думи extends и super при използване на дженерик в Java?
sobes.tech AI
Отговор от AI
В Java, при работа с генерични типове, ключовите думи extends и super се използват за ограничаване на типовете и влияят върху ковариантността и контравариантността.
-
? extends T— горна граница (ковариантност). Позволява използването на тип T или негов подклас. Това означава, че можете да четете обекти от тип T от колекцията, но не можете безопасно да добавяте обекти към такава колекция (освенnull). -
? super T— долна граница (контравариантност). Позволява използването на тип T или негов суперклас. Това означава, че можете да добавяте обекти от тип T към колекцията, но при четене можете да получите само обекти от тип Object или по-общ тип.
Пример:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Може да се чете като Number
// listExtends.add(10); // Грешка при компилация
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Може да се добави Integer
Object obj = listSuper.get(0); // При четене, типът е Object
Така, extends се използва, когато трябва да четете данни от структурата, а super — когато трябва да записвате данни.