Иван Пономарев - Вариантность типов в Java и Kotlin

Поделиться
HTML-код
  • Опубликовано: 6 фев 2025
  • Ближайшая конференция - JPoint 2025, 3-4 апреля (Москва + трансляция).
    Подробности и билеты: jrg.su/T2zfbS
    - -
    Если сравнить программу со зданием, то ее API - это фундамент. Невозможно недооценить важность гибких и удобных API для сопровождаемости кода. И невозможно создать такие API без понимания того, как использовать вариантность типов в классах и методах с параметризацией типов.
    Спикер рассмотрит эволюцию вариантности типов в мире JVM, начиная с ковариантных массивов из самых первых версий Java, через подстановочные типы Java, до вариантности в месте объявления и в месте использования в Kotlin.
    Из примеров - от простых к сложным - вы сможете получить устойчивое понимание того, как и когда использовать вариантность типов в своих API.
    #generics #contravariance #covariance

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

  • @egomate
    @egomate 3 месяца назад

    огромное спасибо за доклад! Перестал бояться сложных дженериков :))

  • @AezAkmi-if3tx
    @AezAkmi-if3tx Месяц назад

    спасибо за доклад!
    20:28
    к параметризованному типу МОЖНО присвоить параметризованный тип с WILDCARD - через UNCHECKED CAST.
    то есть, работа с WILDCARD допускает присвоение в обе стороны, а также создает дыру типобезопасности, наравне с НЕОБРАБОТАННЫМИ ТИПАМИ.
    но, вижу, что это упоминается дальше по докладу.

  • @ДжорджиоДиСарра
    @ДжорджиоДиСарра Год назад +1

    42:31
    Написано
    Function

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

      Джава, страшна, вырубай. Котлин приятнее

  • @dmarsentev
    @dmarsentev Год назад +5

    Спасибо за доклад. Ценно. Из недостатков: слишком дёргано, особенно переключение слайдов. Слишком быстро. Какие-то вещи: фундаментальные, базовые, надо бы проговаривать медленнее и подробнее.

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

      В презентации были запланированы ещё и примеры на спринге, если рассказывать ещё медленнее, то и основная презентация во временные рамки не уложилась бы

  • @vitaly.scientist
    @vitaly.scientist 5 месяцев назад

    С точки зрения типов можно сказать, что null - это подтип любого ссылочного (не примитивного) типа в Java, так как его можно присвоить любому другому типу данных.
    Это подобно Object, который является супертипом любого типа данных.

  • @guai9632
    @guai9632 Год назад +4

    to;dr: ковариантность - фабрики, контравариантность - консьюмеры

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

    Возможно когда-нибудь в Java тоже появится declaration-site variance (JEP-300)

  • @denislopatkin6996
    @denislopatkin6996 8 месяцев назад

    Почему допустимые варианты записи ( 32:51 ) несходятся с контрвариантностью ( 46:58 )?
    Какойто трешь в голове…

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

      полагаю, вас сбили с толку методы addAllFrom() и addAllTo() - второй это то же самое, что первый, просто перевернутый

  • @R1dje
    @R1dje Месяц назад

    Не все понятно, часть с ковариантностью довольно простая и интуитивно ясна, с контрвариантностью все сложнее, но рассказана она буквально за 5 минут.

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Год назад

    22:04 смешно

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

    Сумерки в прямом эфире

  • @vladikvelikiy
    @vladikvelikiy Год назад +5

    Крутой спикер. Особенно это понятно на 30:50.
    1. Зачем он пишет "var"
    2. Почему он игнорит предупреждение от компилятора, что "pair as Pair" is unchecked cast
    3. Также откуда у него в kotlin у Pair появился .b и то, что second(у спикера это b) - это val, а соответственно его фокусы не пройдут
    Крутая подготовка, ждём еще докладов !

    • @НиколайВетров-щ6б
      @НиколайВетров-щ6б Год назад +8

      1,2 - потому что это слайд про то как "впихнуть невпихуемое"?
      3 - почему Вы решили, что в примере использован kotlin.Pair ?

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

      Довольно очевидно, что это кастомный Pair. У класса из стандартной библиотеки 2 параметра типа, а у класса из примера -- один.

  • @skisportsergievposad5600
    @skisportsergievposad5600 10 месяцев назад +1

    Зачем Java ещё гонится за обратной совместимостью? На дворе 21 версия .Есть ещё кто то на версии ниже 5?

    • @dmitrybulgakov2668
      @dmitrybulgakov2668 8 месяцев назад +1

      Имеется ввиду что дженерики появились в версии 5 и тогда решили сделать их путём стирания типов, что привело к отсутствию знания о типе дженерика в рантайме.
      И до сих пор джава машина ничего о дженериках не знает, если сейчас вдруг в Java 22 компиляторе избавятся от стирания типов и они будут доступны в рантайме, то придётся забыть о поддержке программы всеми предыдущими Java машинами, даже теми что поддерживают Java 21. То есть со временем проблема совместимости только усугубилась. Теперь уже точно ничего не сделают со стиранием типов, это тяжкое наследие.

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

      @@dmitrybulgakov2668 нет, стирание типов - это костыли, чтобы код с дженериками работал на старых jvm

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

    Ясно, что в котлине не может быть сильно лучше, чем в джаве, продать не вышло.

  • @ЕленаБаршай-у8х
    @ЕленаБаршай-у8х Год назад +1

    Оу. По мнению спикера не все из нас прочли брошюру Шилдта "Java 2, v5.0 (Tiger). Новые возможности" вышедшую в 2005-м году уже на русском языке?

  • @Steklopod
    @Steklopod Год назад +4

    kotlin 👍🏻, java 👎🏻