Sobes.tech
Middle+

Mis on tüüpide kovariantsus?

sobes.tech AI

Vastus AI-lt

Tüüpide kovariantsus on omadus tüübisüsteemis, mis võimaldab kasutada spetsiifilisemat (alam-) tüüpi seal, kus oodatakse üldisemat (super-) tüüpi.

Java kontekstis avaldub see sageli päriluse ja generikatega töötades. Näiteks, kui klass Kass pärineb Loom-st, siis kovariantsus võimaldab kasutada Kass-i seal, kus oodatakse Loom-i.

Kuid Java generikud on vaikimisi invariantsed, st List<Kass> ei ole List<Loom> alam- või alamtüüp. Kovariantsuse toetamiseks kasutatakse wildcard-tüüpe koos ? extends:

List<? extends Loom> loomad = new ArrayList<Kass>();

Siin tähendab ? extends Loom, et nimekiri sisaldab Loom-i või selle alam-tüüpe, mis võimaldab turvaliselt lugeda objekte nimekirjast, kuid keelab uute elementide lisamise (välja arvatud null).

Sellisel viisil aitab kovariantsus kasutada alam-tüüpe kohtades, kus oodatakse üldisemaid tüüpe, säilitades tüübi turvalisuse ja koodi paindlikkuse.