Java. Ковариантность и контравариантность обобщенных типов на примере ArrayList.
ฝัง
- เผยแพร่เมื่อ 25 ส.ค. 2024
- В этом видео я объясняю на примерах, зачем в Java нужны ковариантные и контравариантные типы, как работает объявление параметров обобщенных типов с ключевыми словами super и extends. Рассматриваем подробно как ведут себя ковариантные и контравариантные типы на примере коллекции ArrayList.
Поддержать канал💰:
yoomoney.ru/to...
#ArhiTutorialsJava #ityoutubersru
не могу без мата объянисть на сколько я рад))
весь день не мог понять контравиантность, тут все понятнее стало, спасибо!
опять забыл что такое контравариантность, обшерстил весь гугл и нашел свой же коммент))))
@@user-qs5qr3ng4n ахах, как я тебя понимаю😆
Спасибо тебе, добрый человек
Это лучшее объяснение по границам вайлдкард, которые я видел и читал. Спасибо тебе огромное.
Самая офигитительная, понятная лекция на эту тему. Ваще лассно объяснено, большое спасибо)😀
Очень долго разбирался с этим вопросом и все это приводило к бОльшей каше, даже по видео были непонятки, но вот эта таблица в конце - спасибо за нее большое.
Блин, спасибо) все вроде знал, но первый раз слышал название этому всему)
Блииин наконец-то я понял что означают эти вопросики!!!
Видео-фаворит по этой теме, но только одно замечание :
При ковариантном типе можно добавить null.
Пожалуйста поправьте, если я не права :)
Спасибо за видео. Сначала было не понятно, когда и почему мы можем брать и добавлять в коллекцию элементы
Сначала пробовал запоминать мнемонические правила - super - put, extends - get
Но вместо того чтобы пытаться что-то запомнить наизусть лучше понять почему это можно, а это нельзя. Благодаря этому видео у меня получилось разобраться. В Java всё логично, как и всегда. Спасибо за информацию.
Есть небольшая неточность: в ковариантный тип можно добавить null
Точно. Как Object сверху, null ограничивает снизу любую иерархию. Этакий супер-потомок 😜
Обьяснение - бомба) спасибо большое
Видео хорошее, в идеале бы белую тему на идею или шрифт повыразительнее
Очень круто, спасибо! Смотрел год назад и вот снова смотрю как в первый раз))) Но в этот раз точно запомнил навсегда)))
Просто супер, очень понятно рассказано. Не поленился зарегистрироваться ради коммента.
Брат за ковариантность лайк на все видосы!
Спасибо, в голове была каша, особенно был неочевиден момент, что в
лайк, хорошее объяснение.
Спасибо большое за прекрасный разбор и примеры!
это лучшее видео по данной теме!) спасибо огромное!
Великолепное объяснение, задоначу с первой зарплаты.
Спасибо
Серега, ты красавчик! Я все понял...СПАСИБО!!!
Огромная благодарность за объяснение! Все понял сразу, текстовые варианты не давали результат)
Спасибо за объяснение !
Сергей, ты лучший разборщик сложных тем!
Ухх, супер, то что надо) теперь осталось понять разницу с in out в котлине))
В C# аналогичная ситуация, хорошо хоть на Java можно дополнительные примеры найти
Автор топ. Даже расспечатал Q-code и вклеил в тетрадь
Самое лучшее, что нашел про , круто
суперконтент!
первый видос на эту тему, который, кажется, я понял, надо еще раз пересмотреть, чтобы запомнить
Очень хорошее объяснение! Спасибо! Единственное не сказали что этот принцип называется PECS)
Спасибо за Ваши видео. А по спрингу сделаете подборку видео?
Я в занимаюсь мобильной разработкой. Нет достаточно опыта в спринге, чтоб ему учить.
Супер объяснение! Спасибо большое!!!!
Просто и ясно о сложном. Спасибо!
Контент топчик, всё доходчиво разъяснил наконец-то понятно ))))
таблиця в кінці - це скарб! Дякую
спасибо, благодаря вашему видео понял тему
Превосходное обьяснение!
Просто офигенно!
спасибо, довольно понятно объяснил)
Отличное объяснение! Спасибо!
Спасибо! Таблицу законспектировал:)
Хороший материал! Большое спасибо!
Огонь!
лучший)
Спасибо, стало чуть понятнее)
У Вас на редкость, для программера, хорошо поставлена речь! Спасибо!
ИнВариантность - по простому, без вариантов)), если то, только его
КоВариантность - со вариантность
Это не речь, это магия монтажа) Когда монтирую видео, вырезаю все неудачно сказанные фразы, по этому результат получается более-менее приемлемый.
В случае , у нас есть гарантия, что T как минимум является Type.
В случае , гарантируется что T - один из предков Type, но какой именно не известно. Из-за этого и возникает ограничение по чтению. Из T безопасно присвоить можно только в Object, потому что точный тип T неизвестен. Зато писать в T можно любых наследников Type, так как они гарантировано могут использоваться везде, где нужен тот самый неизвестный предок Type.
В общем, вся логика подчинена типобезопасности.
браво!
Огромное спасибо
Спасибо, очень доступно.
Спасибо за видео!)))
Спасибо!!!
Большое спасибо!
А как так получается, что в List мы можем добавлять только НАСЛЕДНИКОВ и сам Type, а читать только ПРЕДКОВ и Type? Как это возможно, если List будет состоять только из НАСЛЕДНИКОВ и самого Type?
UPD: спустя несколько просмотров + просмотра про стирание типов - я все понял
Спасибо большое!
Ну я был на нескольких десятках собеседований на Джависта и ни разу не слышал этого вопроса. Но видос стоит посмотреть
Получается, что wildcards нужны как раз для того, чтобы обойти свойство инвариантности у производных классов от классов с использованием параметризованных типов (дженериков). Если я правильно это понял
Таблица 14:30
Я правильно понимаю, что ин/ко/контр-вариантность - это касается только отношения ссылки и присваиваемой коллекции, т.е. только первая колонка финальной таблицы ???
красава
меня немного сбивает, что приравнивание идет снизу вверх, такое ощущение, что наоборот
👍👍👍👍
а есть видео или статья с объяснением причин: почему нельзя записывать или считывать данные? не догоняю
Привет! Свпспбо за урок, познавательно! Но у мен вопрос. Вот вы там создали Статичесский класс фрукт, Цитрус и так даллее. Разве статический класс е должен содержать только статичесские поля? У вас обычные? И еще один вопрос, почему у вас вместо знака присваивания тире? ))
Привет. Статический класс - это обычный класс с обычными полями.
В таблице для инвариантного листа можем читать предков, а как в инвариантном листе могут оказаться предки, например number в integer?
Добрый день. Подскажите, в чем смысл использовать
Да, только в пределах цепочки наследования, а не все подряд. В этом же видео как раз показан такой вариант.
То есть
Надо было добавить что иногда могут спросить про принцип pecs и не всегда понятно что речь об этом.
Не совсем понял такоей момент: "...extends используется в классах, которые предназначены, чтобы из ни читать, т.е. producer-ах...". А разве продюсер не пишет??? Например, что-то записывает в очередь, который потребитель читатет.
producer это тот кто производит объекты, а consumer - тот кто потребляет.
Имеется с виду что из producer читают, но в него не пишут.
@@arhitutorials Понял, спасибо!
Проверил в IDE, если SUPER T то добавлять можно только наследников T, если extends T то при заборе через get кастуется до T и его предков, немного сбивате с толку эта ига слов наследники, предки, туда-сюда
Пожалуйста помогите,у меня вопрос: почему на 9:33 делается вывод,что в ArrayList < ? extends Citrus> oranges нельзя НИЧЕГО вставить-понятно,что мы точно не знаем какой там конкретно тип-но мы же точно можем вставить BigRoundOrange ? ведь мы типизируем вышеуказанную коллекцию либо Citrus либо Orange либо BigRoundOrange - и получается,что BigRoundOrange мы точно можем встать ,разве нет? в чем я не прав? (чувствую,что в чем-то не прав)))
А потом кто-нибудь сделает класс BigRoundLimon, передаст список с ними в эту функцию и все сломается)
Задача компилятора гарантировать, что код будет всегда правильно работать. Это достигается путем запрета любых вариантов, которые позволяют что-либо сломать.
@@arhitutorials Спасибо вам! я когда вопрос задавал - я забыл,то что от одного класса могут одновременно напрямую несколько классов наследоваться-тогда все ясно,спасибо за видео и за ответ!очень благодарен)я понял теперь почему вообще ничего нельзя добавить в
учу котлин , самое понятное видео
Почему в List
Потому что это в текущем контексте у листа тип List
@@arhitutorials Все, дошло)) Спасибо за контент)
Почему массивы в java ковариантны?
Видео на темной теме ужасно, нужно увеличивать видос а это не всегда удобно
сишарпер что ли
Java
Зачем эта вариантность в методах Stream? stateless методы ведь каждый элемент массива отдельно обрабатывают и контейнера то не видят.
Вот скол ко видосов не смотрю непонимаю, авторы, в чем проблема сделать крупнее шрифт?! У кого то 4к моник и где-то в жопе экрана он пишет код, что кропе как в 4к невозможно смотреть видео. Ну посмотрите как делают англоязычные коллеги.
Спасибо
Спасибо
Спасибо