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

Поделиться
HTML-код
  • Опубликовано: 23 ноя 2024

Комментарии • 97

  • @arsenazaryan5157
    @arsenazaryan5157 День назад

    ни как не мог вкатиться в понимания в то что есть принимаемый тип и добавляемый тип. Только в конце зацепился за резюмирующую таблицу в результате проникся пониманием что это две разности. Спасибо

  • @axelrod4840
    @axelrod4840 4 года назад +20

    не могу без мата объянисть на сколько я рад))

  • @grinderos.coding
    @grinderos.coding 8 месяцев назад +2

    Это лучшее объяснение по границам вайлдкард, которые я видел и читал. Спасибо тебе огромное.

  • @БейбутТукибаев-с2ь
    @БейбутТукибаев-с2ь 3 года назад +23

    весь день не мог понять контравиантность, тут все понятнее стало, спасибо!

    • @БейбутТукибаев-п3у
      @БейбутТукибаев-п3у 2 года назад +8

      опять забыл что такое контравариантность, обшерстил весь гугл и нашел свой же коммент))))

    • @fedyaka4
      @fedyaka4 Год назад

      @@БейбутТукибаев-п3у ахах, как я тебя понимаю😆

  • @anastasiiam7836
    @anastasiiam7836 Год назад +3

    Видео-фаворит по этой теме, но только одно замечание :
    При ковариантном типе можно добавить null.
    Пожалуйста поправьте, если я не права :)

  • @dataengineer3961
    @dataengineer3961 3 года назад +4

    Блииин наконец-то я понял что означают эти вопросики!!!

  • @Sinatra1990
    @Sinatra1990 2 года назад +5

    Самая офигитительная, понятная лекция на эту тему. Ваще лассно объяснено, большое спасибо)😀

  • @milordplus
    @milordplus Год назад +1

    Очень круто, спасибо! Смотрел год назад и вот снова смотрю как в первый раз))) Но в этот раз точно запомнил навсегда)))

  • @jopinfuyiro5570
    @jopinfuyiro5570 Год назад +1

    Спасибо за видео. Сначала было не понятно, когда и почему мы можем брать и добавлять в коллекцию элементы
    Сначала пробовал запоминать мнемонические правила - super - put, extends - get
    Но вместо того чтобы пытаться что-то запомнить наизусть лучше понять почему это можно, а это нельзя. Благодаря этому видео у меня получилось разобраться. В Java всё логично, как и всегда. Спасибо за информацию.

  • @andrei8299
    @andrei8299 3 года назад +4

    Очень долго разбирался с этим вопросом и все это приводило к бОльшей каше, даже по видео были непонятки, но вот эта таблица в конце - спасибо за нее большое.

  • @mrrnyash8942
    @mrrnyash8942 Год назад +1

    Спасибо, в голове была каша, особенно был неочевиден момент, что в

  • @spacecowboy3000
    @spacecowboy3000 5 дней назад

    Супер, спасибо!

  • @johnvolt9157
    @johnvolt9157 4 года назад +8

    Блин, спасибо) все вроде знал, но первый раз слышал название этому всему)

  • @severustvr8202
    @severustvr8202 Год назад

    Великолепное объяснение, задоначу с первой зарплаты.

  • @ksenatron
    @ksenatron 4 года назад +10

    Обьяснение - бомба) спасибо большое

  • @НикитаКичигин-щ3ф
    @НикитаКичигин-щ3ф 5 месяцев назад

    Спасибо тебе, добрый человек

  • @billerkean1806
    @billerkean1806 Год назад +1

    лайк, хорошее объяснение.

  • @denisgeraskin5532
    @denisgeraskin5532 Год назад

    Серега, ты красавчик! Я все понял...СПАСИБО!!!

  • @СергейМалышев-т9у
    @СергейМалышев-т9у 3 года назад

    Самое лучшее, что нашел про , круто

  • @m0naco608
    @m0naco608 6 месяцев назад

    Спасибо за объяснение !

  • @ЕкатеринаАйвазова-м2п

    Спасибо большое за прекрасный разбор и примеры!

  • @rollingdice
    @rollingdice 2 года назад +1

    это лучшее видео по данной теме!) спасибо огромное!

  • @Андрей-х2ч3й
    @Андрей-х2ч3й 3 года назад +1

    Просто супер, очень понятно рассказано. Не поленился зарегистрироваться ради коммента.

  • @Horoshiy58
    @Horoshiy58 2 года назад

    Огромная благодарность за объяснение! Все понял сразу, текстовые варианты не давали результат)

  • @ZubkovKirill
    @ZubkovKirill Год назад

    Очень хорошее объяснение! Спасибо! Единственное не сказали что этот принцип называется PECS)

  • @ironoscar3948
    @ironoscar3948 4 года назад +25

    Есть небольшая неточность: в ковариантный тип можно добавить null

    • @1236Destructor
      @1236Destructor Год назад +1

      Точно. Как Object сверху, null ограничивает снизу любую иерархию. Этакий супер-потомок 😜

  • @sanix183
    @sanix183 Год назад

    Сергей, ты лучший разборщик сложных тем!

  • @dusheslov2700
    @dusheslov2700 4 года назад +3

    Брат за ковариантность лайк на все видосы!

  • @ДенисШироков-э3в
    @ДенисШироков-э3в 2 года назад

    спасибо, благодаря вашему видео понял тему

  • @olyalya9651
    @olyalya9651 Год назад

    Супер объяснение! Спасибо большое!!!!

  • @бендерродригез-ф3ш
    @бендерродригез-ф3ш 4 года назад

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

  • @abramovdenis09
    @abramovdenis09 2 года назад +2

    Видео хорошее, в идеале бы белую тему на идею или шрифт повыразительнее

  • @OlegSuhovAlex
    @OlegSuhovAlex Год назад +1

    Спасибо за Ваши видео. А по спрингу сделаете подборку видео?

    • @arhitutorials
      @arhitutorials  Год назад

      Я в занимаюсь мобильной разработкой. Нет достаточно опыта в спринге, чтоб ему учить.

  • @anastasiyachibisova2496
    @anastasiyachibisova2496 Год назад

    Превосходное обьяснение!

  • @zhennik263
    @zhennik263 Год назад

    Ну я был на нескольких десятках собеседований на Джависта и ни разу не слышал этого вопроса. Но видос стоит посмотреть

  • @e.s.krivonogov
    @e.s.krivonogov 2 года назад

    Просто офигенно!

  • @telephon3208
    @telephon3208 Год назад

    суперконтент!

  • @maksigors
    @maksigors Год назад

    спасибо, довольно понятно объяснил)

  • @ВладиславПрокопенко-я5н

    Спасибо

  • @simplechannel7859
    @simplechannel7859 4 года назад +1

    Огонь!

  • @ВасильМихальчук-ж7т

    таблиця в кінці - це скарб! Дякую

  • @СтасГлова
    @СтасГлова 4 года назад +1

    Автор топ. Даже расспечатал Q-code и вклеил в тетрадь

  • @СергейСеменин-щ5д
    @СергейСеменин-щ5д 3 года назад

    Просто и ясно о сложном. Спасибо!

  • @imbc7867ghuui9
    @imbc7867ghuui9 2 года назад

    Ухх, супер, то что надо) теперь осталось понять разницу с in out в котлине))

    • @nikolaystepanets2483
      @nikolaystepanets2483 2 года назад

      В C# аналогичная ситуация, хорошо хоть на Java можно дополнительные примеры найти

  • @СергейЯчменников
    @СергейЯчменников 2 года назад

    браво!

  • @ivank8812
    @ivank8812 3 года назад

    Огромное спасибо

  • @Aticinsane
    @Aticinsane 2 года назад

    Отличное объяснение! Спасибо!

  • @svalyavasvalyava9867
    @svalyavasvalyava9867 2 года назад

    Спасибо!!!

  • @d1ns_799
    @d1ns_799 5 месяцев назад

    Получается, что wildcards нужны как раз для того, чтобы обойти свойство инвариантности у производных классов от классов с использованием параметризованных типов (дженериков). Если я правильно это понял

  • @ИльшатБиккузин
    @ИльшатБиккузин 2 года назад

    Контент топчик, всё доходчиво разъяснил наконец-то понятно ))))

  • @manul-282
    @manul-282 3 года назад

    Хороший материал! Большое спасибо!

  • @d.mertsalov
    @d.mertsalov 4 года назад +1

    Спасибо! Таблицу законспектировал:)

  • @ВасилийЮдин-п8ы
    @ВасилийЮдин-п8ы Год назад

    лучший)

  • @frozen1093
    @frozen1093 2 года назад

    Спасибо, стало чуть понятнее)

  • @TheMarquis
    @TheMarquis 4 года назад

    Спасибо, очень доступно.

  • @p.shpyro
    @p.shpyro 4 года назад

    Большое спасибо!

  • @phil2964
    @phil2964 2 года назад

    👍👍👍👍

  • @quantumtv9509
    @quantumtv9509 3 года назад

    Спасибо за видео!)))

  • @pavelkalinin1119
    @pavelkalinin1119 4 года назад +4

    У Вас на редкость, для программера, хорошо поставлена речь! Спасибо!
    ИнВариантность - по простому, без вариантов)), если то, только его
    КоВариантность - со вариантность

    • @arhitutorials
      @arhitutorials  4 года назад +16

      Это не речь, это магия монтажа) Когда монтирую видео, вырезаю все неудачно сказанные фразы, по этому результат получается более-менее приемлемый.
      В случае , у нас есть гарантия, что T как минимум является Type.
      В случае , гарантируется что T - один из предков Type, но какой именно не известно. Из-за этого и возникает ограничение по чтению. Из T безопасно присвоить можно только в Object, потому что точный тип T неизвестен. Зато писать в T можно любых наследников Type, так как они гарантировано могут использоваться везде, где нужен тот самый неизвестный предок Type.
      В общем, вся логика подчинена типобезопасности.

  • @wladimir1366
    @wladimir1366 10 месяцев назад

    А как так получается, что в List мы можем добавлять только НАСЛЕДНИКОВ и сам Type, а читать только ПРЕДКОВ и Type? Как это возможно, если List будет состоять только из НАСЛЕДНИКОВ и самого Type?
    UPD: спустя несколько просмотров + просмотра про стирание типов - я все понял
    Спасибо большое!

  • @karaedd
    @karaedd 3 года назад

    красава

  • @1236Destructor
    @1236Destructor Год назад

    Я правильно понимаю, что ин/ко/контр-вариантность - это касается только отношения ссылки и присваиваемой коллекции, т.е. только первая колонка финальной таблицы ???

  • @ВасяЩербаков-ф4ы
    @ВасяЩербаков-ф4ы 11 месяцев назад

    Привет! Свпспбо за урок, познавательно! Но у мен вопрос. Вот вы там создали Статичесский класс фрукт, Цитрус и так даллее. Разве статический класс е должен содержать только статичесские поля? У вас обычные? И еще один вопрос, почему у вас вместо знака присваивания тире? ))

    • @arhitutorials
      @arhitutorials  11 месяцев назад

      Привет. Статический класс - это обычный класс с обычными полями.

  • @alexandr6055
    @alexandr6055 Год назад

    Добрый день. Подскажите, в чем смысл использовать

    • @mangnifista7984
      @mangnifista7984 Год назад

      Да, только в пределах цепочки наследования, а не все подряд. В этом же видео как раз показан такой вариант.
      То есть

  • @maxkudinov8481
    @maxkudinov8481 Год назад

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

  • @fkb_ali
    @fkb_ali Год назад

    а есть видео или статья с объяснением причин: почему нельзя записывать или считывать данные? не догоняю

  • @AnotherCogInTheMurderMachine
    @AnotherCogInTheMurderMachine 2 года назад

    Пожалуйста помогите,у меня вопрос: почему на 9:33 делается вывод,что в ArrayList < ? extends Citrus> oranges нельзя НИЧЕГО вставить-понятно,что мы точно не знаем какой там конкретно тип-но мы же точно можем вставить BigRoundOrange ? ведь мы типизируем вышеуказанную коллекцию либо Citrus либо Orange либо BigRoundOrange - и получается,что BigRoundOrange мы точно можем встать ,разве нет? в чем я не прав? (чувствую,что в чем-то не прав)))

    • @arhitutorials
      @arhitutorials  2 года назад

      А потом кто-нибудь сделает класс BigRoundLimon, передаст список с ними в эту функцию и все сломается)
      Задача компилятора гарантировать, что код будет всегда правильно работать. Это достигается путем запрета любых вариантов, которые позволяют что-либо сломать.

    • @AnotherCogInTheMurderMachine
      @AnotherCogInTheMurderMachine 2 года назад

      @@arhitutorials Спасибо вам! я когда вопрос задавал - я забыл,то что от одного класса могут одновременно напрямую несколько классов наследоваться-тогда все ясно,спасибо за видео и за ответ!очень благодарен)я понял теперь почему вообще ничего нельзя добавить в

  • @ilya9852
    @ilya9852 2 года назад +1

    Таблица 14:30

  • @kaperdi1653
    @kaperdi1653 Год назад

    учу котлин , самое понятное видео

  • @wilyammiller3631
    @wilyammiller3631 Год назад

    меня немного сбивает, что приравнивание идет снизу вверх, такое ощущение, что наоборот

  • @oldjohn1503
    @oldjohn1503 Год назад

    Почему в List

    • @arhitutorials
      @arhitutorials  Год назад

      Потому что это в текущем контексте у листа тип List

    • @oldjohn1503
      @oldjohn1503 Год назад

      @@arhitutorials Все, дошло)) Спасибо за контент)

  • @MaximBodrov
    @MaximBodrov Год назад

    Не совсем понял такоей момент: "...extends используется в классах, которые предназначены, чтобы из ни читать, т.е. producer-ах...". А разве продюсер не пишет??? Например, что-то записывает в очередь, который потребитель читатет.

    • @arhitutorials
      @arhitutorials  Год назад

      producer это тот кто производит объекты, а consumer - тот кто потребляет.
      Имеется с виду что из producer читают, но в него не пишут.

    • @MaximBodrov
      @MaximBodrov Год назад

      @@arhitutorials Понял, спасибо!

  • @sovietunionmissionary
    @sovietunionmissionary 7 месяцев назад

    Надо было добавить что иногда могут спросить про принцип pecs и не всегда понятно что речь об этом.

  • @pawsdev
    @pawsdev 2 года назад +1

    Проверил в IDE, если SUPER T то добавлять можно только наследников T, если extends T то при заборе через get кастуется до T и его предков, немного сбивате с толку эта ига слов наследники, предки, туда-сюда

  • @oldjohn1503
    @oldjohn1503 Год назад

    Почему массивы в java ковариантны?

  • @mashamanina6106
    @mashamanina6106 4 года назад +2

    Видео на темной теме ужасно, нужно увеличивать видос а это не всегда удобно

  • @noone-hi6kq
    @noone-hi6kq 3 года назад

    сишарпер что ли

  • @John.Constantine.777
    @John.Constantine.777 Год назад

    Зачем эта вариантность в методах Stream? stateless методы ведь каждый элемент массива отдельно обрабатывают и контейнера то не видят.

  • @donpedro2125
    @donpedro2125 6 месяцев назад

    Вот скол ко видосов не смотрю непонимаю, авторы, в чем проблема сделать крупнее шрифт?! У кого то 4к моник и где-то в жопе экрана он пишет код, что кропе как в 4к невозможно смотреть видео. Ну посмотрите как делают англоязычные коллеги.

  • @egorvafin1978
    @egorvafin1978 2 года назад

    Спасибо

  • @andreihusakou8223
    @andreihusakou8223 Год назад

    Спасибо

  • @Belovoll
    @Belovoll Год назад

    Спасибо