Sobes.tech
Middle+

Čo je to kovariancia typov?

sobes.tech AI

Odpoveď od AI

Kovariencia typov je vlastnosť systému typov, ktorá umožňuje používať špecifickejší (podtyp) typ tam, kde sa očakáva všeobecnejší (supertyp) typ.

V kontexte Javy sa to často prejavuje pri práci s dedičstvom a generikami. Napríklad, ak trieda Mačka dedí od Zviera, kovariencia umožňuje použiť Mačka tam, kde sa očakáva Zviera.

Avšak v Jave sú generiká predvolene invariantné, teda List<Mačka> nie je podtypom List<Zviera>. Na podporu kovariancie sa používajú wildcard typy s ? extends:

List<? extends Zviera> zvieratá = new ArrayList<Mačka>();

Tu ? extends Zviera znamená, že zoznam obsahuje objekty typu Zviera alebo jeho podtypov, čo umožňuje bezpečné čítanie objektov zo zoznamu, ale zakazuje pridávanie nových prvkov (okrem null).

Týmto spôsobom kovariencia pomáha používať podtypy na miestach, kde sa očakávajú všeobecnejšie typy, pričom zachováva bezpečnosť typov a flexibilitu kódu.