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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ต.ค. 2024
  • Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
    Подробности и билеты: jrg.su/Ypf1HW
    - -
    Если сравнить программу со зданием, то ее API - это фундамент. Невозможно недооценить важность гибких и удобных API для сопровождаемости кода. И невозможно создать такие API без понимания того, как использовать вариантность типов в классах и методах с параметризацией типов.
    Спикер рассмотрит эволюцию вариантности типов в мире JVM, начиная с ковариантных массивов из самых первых версий Java, через подстановочные типы Java, до вариантности в месте объявления и в месте использования в Kotlin.
    Из примеров - от простых к сложным - вы сможете получить устойчивое понимание того, как и когда использовать вариантность типов в своих API.
    #generics #contravariance #covariance

ความคิดเห็น • 21

  • @dmarsentev
    @dmarsentev ปีที่แล้ว +5

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

    • @abusecheating179
      @abusecheating179 10 หลายเดือนก่อน

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

  • @vitalyglushchenko8112
    @vitalyglushchenko8112 หลายเดือนก่อน

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

  • @guai9632
    @guai9632 ปีที่แล้ว +3

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

  • @ZhekaKozlov
    @ZhekaKozlov 11 หลายเดือนก่อน +1

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

  • @skisportsergievposad5600
    @skisportsergievposad5600 5 หลายเดือนก่อน +1

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

    • @dmitrybulgakov2668
      @dmitrybulgakov2668 4 หลายเดือนก่อน

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

    • @markchaser3518
      @markchaser3518 2 หลายเดือนก่อน

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

  • @ДжорджиоДиСарра
    @ДжорджиоДиСарра ปีที่แล้ว +1

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

    • @inquisitor4894
      @inquisitor4894 8 หลายเดือนก่อน

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

  • @denislopatkin6996
    @denislopatkin6996 4 หลายเดือนก่อน

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

    • @markchaser3518
      @markchaser3518 2 หลายเดือนก่อน

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

  • @rokononov
    @rokononov 7 หลายเดือนก่อน

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

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil ปีที่แล้ว

    22:04 смешно

  • @bananasba
    @bananasba ปีที่แล้ว +1

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

  • @ЕленаБаршай-у8х
    @ЕленаБаршай-у8х ปีที่แล้ว +1

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

  • @Steklopod
    @Steklopod ปีที่แล้ว +4

    kotlin 👍🏻, java 👎🏻

    • @markchaser3518
      @markchaser3518 2 หลายเดือนก่อน

      scala 👍👍👍

  • @vladikvelikiy
    @vladikvelikiy ปีที่แล้ว +5

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

    • @НиколайВетров-щ6б
      @НиколайВетров-щ6б ปีที่แล้ว +7

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

    • @zephyrred3366
      @zephyrred3366 ปีที่แล้ว +2

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