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

Поділитися
Вставка
  • Опубліковано 9 бер 2023
  • Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
    Подробности и билеты: jrg.su/Ypf1HW
    - -
    Если сравнить программу со зданием, то ее API - это фундамент. Невозможно недооценить важность гибких и удобных API для сопровождаемости кода. И невозможно создать такие API без понимания того, как использовать вариантность типов в классах и методах с параметризацией типов.
    Спикер рассмотрит эволюцию вариантности типов в мире JVM, начиная с ковариантных массивов из самых первых версий Java, через подстановочные типы Java, до вариантности в месте объявления и в месте использования в Kotlin.
    Из примеров - от простых к сложным - вы сможете получить устойчивое понимание того, как и когда использовать вариантность типов в своих API.
    #generics #contravariance #covariance
  • Наука та технологія

КОМЕНТАРІ • 20

  • @dmarsentev
    @dmarsentev Рік тому +4

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

    • @abusecheating179
      @abusecheating179 8 місяців тому

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

  • @guai9632
    @guai9632 Рік тому +3

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

  • @ZhekaKozlov
    @ZhekaKozlov 9 місяців тому +1

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

  • @user-ch8gc5rl4o
    @user-ch8gc5rl4o Рік тому +1

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

    • @inquisitor4894
      @inquisitor4894 6 місяців тому

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

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Рік тому

    22:04 смешно

  • @rokononov
    @rokononov 5 місяців тому

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

  • @denislopatkin6996
    @denislopatkin6996 Місяць тому

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

    • @markchaser3518
      @markchaser3518 3 дні тому

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

  • @bananasba
    @bananasba Рік тому +1

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

  • @skisportsergievposad5600
    @skisportsergievposad5600 3 місяці тому

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

    • @dmitrybulgakov2668
      @dmitrybulgakov2668 2 місяці тому

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

    • @markchaser3518
      @markchaser3518 3 дні тому

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

  • @user-vh5gk7et4g
    @user-vh5gk7et4g Рік тому +1

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

  • @vladikvelikiy
    @vladikvelikiy Рік тому +5

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

    • @user-nv4pd9vr2g
      @user-nv4pd9vr2g Рік тому +7

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

    • @zephyrred3366
      @zephyrred3366 Рік тому +2

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

  • @Steklopod
    @Steklopod Рік тому +4

    kotlin 👍🏻, java 👎🏻