Sobes.tech
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.