Junior — Middle
Čím se liší klíčová slova extends a super při používání generik v Javě?
sobes.tech AI
Odpověď od AI
V jazyce Java, při práci s generiky se klíčová slova extends a super používají k omezení typů a ovlivňují kovarianci a kontravarianci.
-
? extends T— horní omezení (kovariance). Umožňuje použití typu T nebo jakékoliv jeho podtřídy. To znamená, že lze číst objekty typu T z kolekce, ale není možné bezpečně přidávat objekty do takové kolekce (kroměnull). -
? super T— dolní omezení (kontravarianta). Umožňuje použití typu T nebo jakékoliv jeho nadtřídy. To znamená, že lze přidávat objekty typu T do kolekce, ale při čtení lze získat pouze objekty typu Object nebo obecnějšího typu.
Příklad:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Lze číst jako Number
// listExtends.add(10); // Chyba při kompilaci
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Lze přidat Integer
Object obj = listSuper.get(0); // Při čtení je typ Object
Tedy, extends se používá, když je potřeba číst data ze struktury, a super když je potřeba zapisovat data.