Java. Ковариантность и контравариантность обобщенных типов на примере ArrayList.

  Рет қаралды 28,555

Sergey Arkhipov Java Tutorials

Sergey Arkhipov Java Tutorials

Күн бұрын

Пікірлер: 98
@user-segadev
@user-segadev 4 күн бұрын
несколько лет назад смотрел, все понял) но приходится пересматривать перед собесами, забыл уже подробности. Автору респект !!!
@arsenazaryan5157
@arsenazaryan5157 8 күн бұрын
ни как не мог вкатиться в понимания в то что есть принимаемый тип и добавляемый тип. Только в конце зацепился за резюмирующую таблицу в результате проникся пониманием что это две разности. Спасибо
@grinderos.coding
@grinderos.coding 8 ай бұрын
Это лучшее объяснение по границам вайлдкард, которые я видел и читал. Спасибо тебе огромное.
@axelrod4840
@axelrod4840 4 жыл бұрын
не могу без мата объянисть на сколько я рад))
@БейбутТукибаев-с2ь
@БейбутТукибаев-с2ь 3 жыл бұрын
весь день не мог понять контравиантность, тут все понятнее стало, спасибо!
@БейбутТукибаев-п3у
@БейбутТукибаев-п3у 2 жыл бұрын
опять забыл что такое контравариантность, обшерстил весь гугл и нашел свой же коммент))))
@fedyaka4
@fedyaka4 Жыл бұрын
@@БейбутТукибаев-п3у ахах, как я тебя понимаю😆
@dataengineer3961
@dataengineer3961 3 жыл бұрын
Блииин наконец-то я понял что означают эти вопросики!!!
@Sinatra1990
@Sinatra1990 2 жыл бұрын
Самая офигитительная, понятная лекция на эту тему. Ваще лассно объяснено, большое спасибо)😀
@anastasiiam7836
@anastasiiam7836 Жыл бұрын
Видео-фаворит по этой теме, но только одно замечание : При ковариантном типе можно добавить null. Пожалуйста поправьте, если я не права :)
@milordplus
@milordplus Жыл бұрын
Очень круто, спасибо! Смотрел год назад и вот снова смотрю как в первый раз))) Но в этот раз точно запомнил навсегда)))
@jopinfuyiro5570
@jopinfuyiro5570 Жыл бұрын
Спасибо за видео. Сначала было не понятно, когда и почему мы можем брать и добавлять в коллекцию элементы Сначала пробовал запоминать мнемонические правила - super - put, extends - get Но вместо того чтобы пытаться что-то запомнить наизусть лучше понять почему это можно, а это нельзя. Благодаря этому видео у меня получилось разобраться. В Java всё логично, как и всегда. Спасибо за информацию.
@andrei8299
@andrei8299 3 жыл бұрын
Очень долго разбирался с этим вопросом и все это приводило к бОльшей каше, даже по видео были непонятки, но вот эта таблица в конце - спасибо за нее большое.
@severustvr8202
@severustvr8202 Жыл бұрын
Великолепное объяснение, задоначу с первой зарплаты.
@johnvolt9157
@johnvolt9157 4 жыл бұрын
Блин, спасибо) все вроде знал, но первый раз слышал название этому всему)
@spacecowboy3000
@spacecowboy3000 12 күн бұрын
Супер, спасибо!
@ВасильМихальчук-ж7т
@ВасильМихальчук-ж7т Жыл бұрын
таблиця в кінці - це скарб! Дякую
@НикитаКичигин-щ3ф
@НикитаКичигин-щ3ф 5 ай бұрын
Спасибо тебе, добрый человек
@denisgeraskin5532
@denisgeraskin5532 Жыл бұрын
Серега, ты красавчик! Я все понял...СПАСИБО!!!
@m0naco608
@m0naco608 7 ай бұрын
Спасибо за объяснение !
@mrrnyash8942
@mrrnyash8942 Жыл бұрын
Спасибо, в голове была каша, особенно был неочевиден момент, что в
@billerkean1806
@billerkean1806 Жыл бұрын
лайк, хорошее объяснение.
@ironoscar3948
@ironoscar3948 4 жыл бұрын
Есть небольшая неточность: в ковариантный тип можно добавить null
@1236Destructor
@1236Destructor Жыл бұрын
Точно. Как Object сверху, null ограничивает снизу любую иерархию. Этакий супер-потомок 😜
@СергейМалышев-т9у
@СергейМалышев-т9у 3 жыл бұрын
Самое лучшее, что нашел про , круто
@ksenatron
@ksenatron 4 жыл бұрын
Обьяснение - бомба) спасибо большое
@Андрей-х2ч3й
@Андрей-х2ч3й 3 жыл бұрын
Просто супер, очень понятно рассказано. Не поленился зарегистрироваться ради коммента.
@ZubkovKirill
@ZubkovKirill Жыл бұрын
Очень хорошее объяснение! Спасибо! Единственное не сказали что этот принцип называется PECS)
@ЕкатеринаАйвазова-м2п
@ЕкатеринаАйвазова-м2п Жыл бұрын
Спасибо большое за прекрасный разбор и примеры!
@rollingdice
@rollingdice 2 жыл бұрын
это лучшее видео по данной теме!) спасибо огромное!
@dusheslov2700
@dusheslov2700 4 жыл бұрын
Брат за ковариантность лайк на все видосы!
@sanix183
@sanix183 Жыл бұрын
Сергей, ты лучший разборщик сложных тем!
@ВладиславПрокопенко-я5н
@ВладиславПрокопенко-я5н 2 жыл бұрын
Спасибо
@imbc7867ghuui9
@imbc7867ghuui9 2 жыл бұрын
Ухх, супер, то что надо) теперь осталось понять разницу с in out в котлине))
@nikolaystepanets2483
@nikolaystepanets2483 2 жыл бұрын
В C# аналогичная ситуация, хорошо хоть на Java можно дополнительные примеры найти
@Horoshiy58
@Horoshiy58 2 жыл бұрын
Огромная благодарность за объяснение! Все понял сразу, текстовые варианты не давали результат)
@zhennik263
@zhennik263 Жыл бұрын
Ну я был на нескольких десятках собеседований на Джависта и ни разу не слышал этого вопроса. Но видос стоит посмотреть
@abramovdenis09
@abramovdenis09 2 жыл бұрын
Видео хорошее, в идеале бы белую тему на идею или шрифт повыразительнее
@olyalya9651
@olyalya9651 Жыл бұрын
Супер объяснение! Спасибо большое!!!!
@ДенисШироков-э3в
@ДенисШироков-э3в 2 жыл бұрын
спасибо, благодаря вашему видео понял тему
@anastasiyachibisova2496
@anastasiyachibisova2496 Жыл бұрын
Превосходное обьяснение!
@OlegSuhovAlex
@OlegSuhovAlex Жыл бұрын
Спасибо за Ваши видео. А по спрингу сделаете подборку видео?
@arhitutorials
@arhitutorials Жыл бұрын
Я в занимаюсь мобильной разработкой. Нет достаточно опыта в спринге, чтоб ему учить.
@telephon3208
@telephon3208 Жыл бұрын
суперконтент!
@СтасГлова
@СтасГлова 4 жыл бұрын
Автор топ. Даже расспечатал Q-code и вклеил в тетрадь
@maksigors
@maksigors Жыл бұрын
спасибо, довольно понятно объяснил)
@бендерродригез-ф3ш
@бендерродригез-ф3ш 4 жыл бұрын
первый видос на эту тему, который, кажется, я понял, надо еще раз пересмотреть, чтобы запомнить
@ИльшатБиккузин
@ИльшатБиккузин 2 жыл бұрын
Контент топчик, всё доходчиво разъяснил наконец-то понятно ))))
@СергейСеменин-щ5д
@СергейСеменин-щ5д 3 жыл бұрын
Просто и ясно о сложном. Спасибо!
@Aticinsane
@Aticinsane 2 жыл бұрын
Отличное объяснение! Спасибо!
@e.s.krivonogov
@e.s.krivonogov 2 жыл бұрын
Просто офигенно!
@ivank8812
@ivank8812 3 жыл бұрын
Огромное спасибо
@СергейЯчменников
@СергейЯчменников 2 жыл бұрын
браво!
@svalyavasvalyava9867
@svalyavasvalyava9867 2 жыл бұрын
Спасибо!!!
@manul-282
@manul-282 3 жыл бұрын
Хороший материал! Большое спасибо!
@d.mertsalov
@d.mertsalov 4 жыл бұрын
Спасибо! Таблицу законспектировал:)
@d1ns_799
@d1ns_799 5 ай бұрын
Получается, что wildcards нужны как раз для того, чтобы обойти свойство инвариантности у производных классов от классов с использованием параметризованных типов (дженериков). Если я правильно это понял
@simplechannel7859
@simplechannel7859 4 жыл бұрын
Огонь!
@frozen1093
@frozen1093 2 жыл бұрын
Спасибо, стало чуть понятнее)
@ilya9852
@ilya9852 2 жыл бұрын
Таблица 14:30
@pavelkalinin1119
@pavelkalinin1119 4 жыл бұрын
У Вас на редкость, для программера, хорошо поставлена речь! Спасибо! ИнВариантность - по простому, без вариантов)), если то, только его КоВариантность - со вариантность
@arhitutorials
@arhitutorials 4 жыл бұрын
Это не речь, это магия монтажа) Когда монтирую видео, вырезаю все неудачно сказанные фразы, по этому результат получается более-менее приемлемый. В случае , у нас есть гарантия, что T как минимум является Type. В случае , гарантируется что T - один из предков Type, но какой именно не известно. Из-за этого и возникает ограничение по чтению. Из T безопасно присвоить можно только в Object, потому что точный тип T неизвестен. Зато писать в T можно любых наследников Type, так как они гарантировано могут использоваться везде, где нужен тот самый неизвестный предок Type. В общем, вся логика подчинена типобезопасности.
@p.shpyro
@p.shpyro 4 жыл бұрын
Большое спасибо!
@TheMarquis
@TheMarquis 4 жыл бұрын
Спасибо, очень доступно.
@phil2964
@phil2964 2 жыл бұрын
👍👍👍👍
@wladimir1366
@wladimir1366 10 ай бұрын
А как так получается, что в List мы можем добавлять только НАСЛЕДНИКОВ и сам Type, а читать только ПРЕДКОВ и Type? Как это возможно, если List будет состоять только из НАСЛЕДНИКОВ и самого Type? UPD: спустя несколько просмотров + просмотра про стирание типов - я все понял Спасибо большое!
@quantumtv9509
@quantumtv9509 3 жыл бұрын
Спасибо за видео!)))
@ВасилийЮдин-п8ы
@ВасилийЮдин-п8ы Жыл бұрын
лучший)
@1236Destructor
@1236Destructor Жыл бұрын
Я правильно понимаю, что ин/ко/контр-вариантность - это касается только отношения ссылки и присваиваемой коллекции, т.е. только первая колонка финальной таблицы ???
@maxkudinov8481
@maxkudinov8481 Жыл бұрын
В таблице для инвариантного листа можем читать предков, а как в инвариантном листе могут оказаться предки, например number в integer?
@alexandr6055
@alexandr6055 Жыл бұрын
Добрый день. Подскажите, в чем смысл использовать
@mangnifista7984
@mangnifista7984 Жыл бұрын
Да, только в пределах цепочки наследования, а не все подряд. В этом же видео как раз показан такой вариант. То есть
@ВасяЩербаков-ф4ы
@ВасяЩербаков-ф4ы 11 ай бұрын
Привет! Свпспбо за урок, познавательно! Но у мен вопрос. Вот вы там создали Статичесский класс фрукт, Цитрус и так даллее. Разве статический класс е должен содержать только статичесские поля? У вас обычные? И еще один вопрос, почему у вас вместо знака присваивания тире? ))
@arhitutorials
@arhitutorials 11 ай бұрын
Привет. Статический класс - это обычный класс с обычными полями.
@fkb_ali
@fkb_ali Жыл бұрын
а есть видео или статья с объяснением причин: почему нельзя записывать или считывать данные? не догоняю
@karaedd
@karaedd 3 жыл бұрын
красава
@kaperdi1653
@kaperdi1653 Жыл бұрын
учу котлин , самое понятное видео
@AnotherCogInTheMurderMachine
@AnotherCogInTheMurderMachine 2 жыл бұрын
Пожалуйста помогите,у меня вопрос: почему на 9:33 делается вывод,что в ArrayList < ? extends Citrus> oranges нельзя НИЧЕГО вставить-понятно,что мы точно не знаем какой там конкретно тип-но мы же точно можем вставить BigRoundOrange ? ведь мы типизируем вышеуказанную коллекцию либо Citrus либо Orange либо BigRoundOrange - и получается,что BigRoundOrange мы точно можем встать ,разве нет? в чем я не прав? (чувствую,что в чем-то не прав)))
@arhitutorials
@arhitutorials 2 жыл бұрын
А потом кто-нибудь сделает класс BigRoundLimon, передаст список с ними в эту функцию и все сломается) Задача компилятора гарантировать, что код будет всегда правильно работать. Это достигается путем запрета любых вариантов, которые позволяют что-либо сломать.
@AnotherCogInTheMurderMachine
@AnotherCogInTheMurderMachine 2 жыл бұрын
@@arhitutorials Спасибо вам! я когда вопрос задавал - я забыл,то что от одного класса могут одновременно напрямую несколько классов наследоваться-тогда все ясно,спасибо за видео и за ответ!очень благодарен)я понял теперь почему вообще ничего нельзя добавить в
@wilyammiller3631
@wilyammiller3631 Жыл бұрын
меня немного сбивает, что приравнивание идет снизу вверх, такое ощущение, что наоборот
@oldjohn1503
@oldjohn1503 Жыл бұрын
Почему в List
@arhitutorials
@arhitutorials Жыл бұрын
Потому что это в текущем контексте у листа тип List
@oldjohn1503
@oldjohn1503 Жыл бұрын
@@arhitutorials Все, дошло)) Спасибо за контент)
@sovietunionmissionary
@sovietunionmissionary 7 ай бұрын
Надо было добавить что иногда могут спросить про принцип pecs и не всегда понятно что речь об этом.
@MaximBodrov
@MaximBodrov Жыл бұрын
Не совсем понял такоей момент: "...extends используется в классах, которые предназначены, чтобы из ни читать, т.е. producer-ах...". А разве продюсер не пишет??? Например, что-то записывает в очередь, который потребитель читатет.
@arhitutorials
@arhitutorials Жыл бұрын
producer это тот кто производит объекты, а consumer - тот кто потребляет. Имеется с виду что из producer читают, но в него не пишут.
@MaximBodrov
@MaximBodrov Жыл бұрын
@@arhitutorials Понял, спасибо!
@pawsdev
@pawsdev 2 жыл бұрын
Проверил в IDE, если SUPER T то добавлять можно только наследников T, если extends T то при заборе через get кастуется до T и его предков, немного сбивате с толку эта ига слов наследники, предки, туда-сюда
@oldjohn1503
@oldjohn1503 Жыл бұрын
Почему массивы в java ковариантны?
@mashamanina6106
@mashamanina6106 4 жыл бұрын
Видео на темной теме ужасно, нужно увеличивать видос а это не всегда удобно
@noone-hi6kq
@noone-hi6kq 3 жыл бұрын
сишарпер что ли
@СергейМалышев-т9у
@СергейМалышев-т9у 3 жыл бұрын
Java
@John.Constantine.777
@John.Constantine.777 Жыл бұрын
Зачем эта вариантность в методах Stream? stateless методы ведь каждый элемент массива отдельно обрабатывают и контейнера то не видят.
@donpedro2125
@donpedro2125 7 ай бұрын
Вот скол ко видосов не смотрю непонимаю, авторы, в чем проблема сделать крупнее шрифт?! У кого то 4к моник и где-то в жопе экрана он пишет код, что кропе как в 4к невозможно смотреть видео. Ну посмотрите как делают англоязычные коллеги.
@egorvafin1978
@egorvafin1978 2 жыл бұрын
Спасибо
@andreihusakou8223
@andreihusakou8223 Жыл бұрын
Спасибо
@Belovoll
@Belovoll Жыл бұрын
Спасибо
Java. Стирание типов.
14:07
Sergey Arkhipov Java Tutorials
Рет қаралды 16 М.
SIZE DOESN’T MATTER @benjaminjiujitsu
00:46
Natan por Aí
Рет қаралды 7 МЛН
Confronting Ronaldo
00:21
MrBeast
Рет қаралды 33 МЛН
From Small To Giant 0%🍫 VS 100%🍫 #katebrush #shorts #gummy
00:19
Java. Класс Object. Разбор вопросов на собеседование.
21:16
Sergey Arkhipov Java Tutorials
Рет қаралды 31 М.
C#. Covariance and Contravariance in generic interfaces.
6:35
ExtremeCode
Рет қаралды 82 М.
Иван Пономарев - Вариантность типов в Java и Kotlin
47:46
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 8 М.
Многопоточность глазами разработчика
1:36:04
Generics In Java - Full Simple Tutorial
17:34
Coding with John
Рет қаралды 1,1 МЛН
Java. Методы equals и hashCode.
15:05
Sergey Arkhipov Java Tutorials
Рет қаралды 39 М.
Александр Маторин - Неочевидные Дженерики
42:00
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 50 М.
Python - полный курс для начинающих. Этот навык изменит твою жизнь.
5:27:42
SIZE DOESN’T MATTER @benjaminjiujitsu
00:46
Natan por Aí
Рет қаралды 7 МЛН