Иван Пономарев - Вариантность типов в Java и Kotlin
HTML-код
- Опубликовано: 6 фев 2025
- Ближайшая конференция - JPoint 2025, 3-4 апреля (Москва + трансляция).
Подробности и билеты: jrg.su/T2zfbS
- -
Если сравнить программу со зданием, то ее API - это фундамент. Невозможно недооценить важность гибких и удобных API для сопровождаемости кода. И невозможно создать такие API без понимания того, как использовать вариантность типов в классах и методах с параметризацией типов.
Спикер рассмотрит эволюцию вариантности типов в мире JVM, начиная с ковариантных массивов из самых первых версий Java, через подстановочные типы Java, до вариантности в месте объявления и в месте использования в Kotlin.
Из примеров - от простых к сложным - вы сможете получить устойчивое понимание того, как и когда использовать вариантность типов в своих API.
#generics #contravariance #covariance
огромное спасибо за доклад! Перестал бояться сложных дженериков :))
спасибо за доклад!
20:28
к параметризованному типу МОЖНО присвоить параметризованный тип с WILDCARD - через UNCHECKED CAST.
то есть, работа с WILDCARD допускает присвоение в обе стороны, а также создает дыру типобезопасности, наравне с НЕОБРАБОТАННЫМИ ТИПАМИ.
но, вижу, что это упоминается дальше по докладу.
42:31
Написано
Function
Джава, страшна, вырубай. Котлин приятнее
Спасибо за доклад. Ценно. Из недостатков: слишком дёргано, особенно переключение слайдов. Слишком быстро. Какие-то вещи: фундаментальные, базовые, надо бы проговаривать медленнее и подробнее.
В презентации были запланированы ещё и примеры на спринге, если рассказывать ещё медленнее, то и основная презентация во временные рамки не уложилась бы
С точки зрения типов можно сказать, что null - это подтип любого ссылочного (не примитивного) типа в Java, так как его можно присвоить любому другому типу данных.
Это подобно Object, который является супертипом любого типа данных.
to;dr: ковариантность - фабрики, контравариантность - консьюмеры
Возможно когда-нибудь в Java тоже появится declaration-site variance (JEP-300)
Почему допустимые варианты записи ( 32:51 ) несходятся с контрвариантностью ( 46:58 )?
Какойто трешь в голове…
полагаю, вас сбили с толку методы addAllFrom() и addAllTo() - второй это то же самое, что первый, просто перевернутый
Не все понятно, часть с ковариантностью довольно простая и интуитивно ясна, с контрвариантностью все сложнее, но рассказана она буквально за 5 минут.
22:04 смешно
Сумерки в прямом эфире
Крутой спикер. Особенно это понятно на 30:50.
1. Зачем он пишет "var"
2. Почему он игнорит предупреждение от компилятора, что "pair as Pair" is unchecked cast
3. Также откуда у него в kotlin у Pair появился .b и то, что second(у спикера это b) - это val, а соответственно его фокусы не пройдут
Крутая подготовка, ждём еще докладов !
1,2 - потому что это слайд про то как "впихнуть невпихуемое"?
3 - почему Вы решили, что в примере использован kotlin.Pair ?
Довольно очевидно, что это кастомный Pair. У класса из стандартной библиотеки 2 параметра типа, а у класса из примера -- один.
Зачем Java ещё гонится за обратной совместимостью? На дворе 21 версия .Есть ещё кто то на версии ниже 5?
Имеется ввиду что дженерики появились в версии 5 и тогда решили сделать их путём стирания типов, что привело к отсутствию знания о типе дженерика в рантайме.
И до сих пор джава машина ничего о дженериках не знает, если сейчас вдруг в Java 22 компиляторе избавятся от стирания типов и они будут доступны в рантайме, то придётся забыть о поддержке программы всеми предыдущими Java машинами, даже теми что поддерживают Java 21. То есть со временем проблема совместимости только усугубилась. Теперь уже точно ничего не сделают со стиранием типов, это тяжкое наследие.
@@dmitrybulgakov2668 нет, стирание типов - это костыли, чтобы код с дженериками работал на старых jvm
Ясно, что в котлине не может быть сильно лучше, чем в джаве, продать не вышло.
Оу. По мнению спикера не все из нас прочли брошюру Шилдта "Java 2, v5.0 (Tiger). Новые возможности" вышедшую в 2005-м году уже на русском языке?
kotlin 👍🏻, java 👎🏻
scala 👍👍👍
@@markchaser3518 Groovy🤞