В каких случаях можно использовать контр-дисперсию? Зачем использовать ковариацию против наследования?

Может ли кто-нибудь привести пример, когда контр-дисперсия полезна? и зачем использовать ковариацию против наследования?


person ALjazzguitar    schedule 18.06.2020    source источник
comment
docs.scala-lang.org/tour/variances.html   -  person Dmytro Mitin    schedule 18.06.2020
comment
Противодисперсия или ковариация бесполезны и бесполезны. Некоторые виды являются ковариантными, инвариантными или контрвариантными только по своей природе. Это больше похоже на кислотность, основность или нейтральность ... кислоты бывают только кислотными, а основания - только основными. Также дисперсия - это более высокая концепция, построенная на основе наследования. Для видов дисперсия аналогична наследованию для типов.   -  person sarveshseri    schedule 18.06.2020
comment
Отличным примером использования контравариантности являются функции. Функции контравариантны по своим входам. Так, например, предположим, что вам нужна функция, которая переходит от Домашние животные к Цвета, но у вас уже есть функция, которая переходит от всех Животные к < b> Цвета, благодаря контравариантности вы можете использовать эту функцию, и вы знаете, что она будет работать, потому что, если функция способна обрабатывать всех животных, почему она не сможет обрабатывать домашних животных, если они являются подтипом первый. - Кстати, я не понимаю, что вы имеете в виду, говоря о наследовании вместо covaraince?   -  person Luis Miguel Mejía Suárez    schedule 18.06.2020
comment
Старый, но все еще хороший: julien.richard-foy.fr/blog/2013/02/21/   -  person cchantep    schedule 18.06.2020
comment
Интерфейс Comparable в Java - отличный пример контравариантности. Методы, использующие объекты Comparable, часто имеют параметры типа, такие как <T extends Comparable<? super T>>. Это позволяет сравнивать 2 объекта, даже если они просто наследуют методы сравнения от своих суперклассов и не реализовали их сами.   -  person user    schedule 18.06.2020


Ответы (1)


Может ли кто-нибудь привести пример, когда контр-дисперсия полезна?

Противодисперсия бесполезна. Это просто свойство, которым обладают некоторые конструкторы типов.

Некоторые целые числа нечетные, некоторые четные. Это просто свойство этих целых чисел.

Точно так же некоторые конструкторы типов ковариантны по параметру типа или контрвариантному варианту. (Или инвариант.)

и зачем использовать ковариацию […]?

Это тоже не то, чем вы пользуетесь. Это просто то, что есть.

и зачем использовать ковариацию против наследования?

Этот вопрос действительно не имеет смысла. Не только по указанной выше причине (ковариация - это просто то, что есть, а не то, что вы используете), но также из-за связи между ними: дисперсия - это то, что является следствием < / em> взаимодействия между полиморфизмом подтипа и параметрическим полиморфизмом.

person Jörg W Mittag    schedule 18.06.2020