Sobes.tech
Middle+

Ковариантии навъи чист?

sobes.tech AI

Ҷавоб аз AI

Ковариантности типҳо хусусияти системаи типҳо мебошад, ки имкон медиҳад, ки як типи бештар мушаххас (подтип) дар ҷойи истифода шавад, ки дар он интизор меравад, ки як типи умумтар (супертип) истифода шавад.

Дар контексти Java, ин одатан дар кор бо меросгирӣ ва генерикҳо (generics) ба назар мерасад. Масалан, агар синфи Маск аз Ҳайвон мерос гирад, ковариантӣ имкон медиҳад, ки Маск дар ҷойи интизорӣ барои Ҳайвон истифода шавад.

Аммо, дар Java, генерикҳо ба таври пешфарз инвариантанд, яъне List<Маск> подтипи List<Ҳайвон> нест. Барои дастгирии коварианти, истифодаи wildcard-ҳои бо ? extends истифода мешавад:

List<? extends Ҳайвон> ҳайвонот = new ArrayList<Маск>();

Ин ҷо, ? extends Ҳайвон маънои онро дорад, ки рӯйхат объектҳои аз навъи Ҳайвон ё подтипҳои он дорад, ки имкон медиҳад, ки объектҳоро аз рӯйхат бехатар хонда, аммо илова кардани объектҳои нав (ба истиснои null) манъ аст.

Бо ин роҳ, коварианти кӯмак мекунад, ки подтипҳоро дар ҷойҳое, ки интизор меравад, истифода бурда, бехатарии навъҳоро нигоҳ дорад ва флексибиллии коди худро таъмин кунад.