Sunrabbit

Ковариантность и контравариантность

  • Язык написания: Корейский
  • Страна: Все страныcountry-flag
  • ИТ

Создано: 2024-11-01

Создано: 2024-11-01 01:06

Данное описание встречается, если вы разработчик компилятора,
используете API компилятора,
или чрезмерно используете систему типов компилятора

Это то, с чем вы естественно сталкиваетесь.


И это естественным образом интегрируется в нашу жизнь кодирования


Вкратце, если есть два типа Animal и Dog,

если Dog присваивается Animal, этоковариантностьи

наоборотесли Animal присваивается Dog, этоконтравариантность.

Обычно Animal не может быть присвоен Dog.

Потому что с точки зрения обычных людей это нецелесообразно,
поэтому разработчики компиляторов учитывают это ив некоторых частяхдобавляют контравариантность


Обычно контравариантность используется для входных значений функции, а ковариантность поддерживается для выходных значений.


Зачем нужна эта контравариантность?— можете подумать.

Это помогает работать более гибко и поддерживать полиморфизм в таких областях, как обработка событий.

В случае ковариантности могут возникнуть проблемы.


В этом коде мы обеспечили гибкость, заменив Dog на Animal, и позволили обратить внимание на полиморфизм.

Если бы вместо Animal использовался подтип Dog, например, Chiwawa, при вызове обработчика событий возникла бы ошибка из-за отсутствия в Dog интерфейса, уникального для Chiwawa.


На самом деле, поскольку мы будем использовать тип Animal при вызове функции, можно просто сказать: "Подставьте любой подтип Animal при вызове".

Это может показаться похожим на присвоение Dog к Animal.


Таким образом, контравариантность обычно используется для входных значений.


Изменчивость, неизменность


Вкратце, изменчивость — это и ковариантность, и контравариантность, а неизменность — это ни то, ни другое.

В заключение

Это простое и в то же время сложное понятие,

поэтому советую вам почитать это.




Комментарии0

Что такое маркировка данных? Типы, преимущества и недостаткиМаркировка данных — это процесс присвоения тегов данным, чтобы искусственный интеллект мог их понять. Он используется в различных областях, например, для различения собак и кошек, и помогает повысить производительность моделей.
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

March 29, 2024

[Объекты] Глава 2. Объектно-ориентированное программированиеПонятия объектно-ориентированного программирования и реализация системы бронирования билетов на кинофильмы, с помощью которой объясняются объекты, классы, сотрудничество, наследование и полиморфизм.
제이온
제이온
제이온
제이온

April 28, 2024

[Эффективный Java] Элемент 6. Избегайте ненужного создания объектовНенужное создание объектов приводит к расточительности памяти, поэтому для объектов, таких как строки или логические значения, лучше использовать литералы или статические фабричные методы.
제이온
제이온
제이온
제이온

April 28, 2024

[Эффективный Java] Элемент 2. Если конструктор имеет много параметров, рассмотрите возможность использования билдераПри большом количестве параметров конструктора использование паттерна билдер может повысить читабельность и стабильность. Паттерн билдер более эффективен, чем паттерн Java Beans или паттерн телескопических конструкторов.
제이온
제이온
제이온
제이온

April 27, 2024

29.11.2024 Поздние новости: платная подписка на Replit / Хорошие привычки в разработке ПОВ записи блога от 29 ноября 2024 года мы делимся опытом использования платной подписки на Replit и представляем 10 хороших привычек в разработке программного обеспечения. Обсуждаются стратегии эффективного кодирования и рефакторинга, а также важность тес
Charles Lee
Charles Lee
Charles Lee
Charles Lee

November 29, 2024