Тёмный

Александр Маторин - Неочевидные Дженерики 

JPoint, Joker и JUG ru
Подписаться 55 тыс.
Просмотров 50 тыс.
50% 1

Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
Подробности и билеты: jrg.su/Ypf1HW
- -
. . . . Александр Маторин, Сбербанк-Технологии - Неочевидные Дженерики
Международная Java-конференция JPoint 2016
Москва, 22-23 апреля 2016
Мы обсудим во что компилируются дженерики, что такое bridge методы, type erasure, heap pollution, примеры кода, которые, должны компилироваться, но не компилируется и наоборот, другие дженерик тонкости

Опубликовано:

 

24 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 39   
@RuslanSolovev-j6w
@RuslanSolovev-j6w 8 лет назад
Отличный доклад. Можно ли все-таки пояснить последний момент со String'ом? К сожалению, обсуждение прервали на самом интересном месте.
@misha4392
@misha4392 9 месяцев назад
Нелогичные - это точно. Я всё пытаюсь как-то понять, как они работают, а не просто заучить, и становится еще хуже. Лекция всё равно хорошая, спасибо.
@crystalwhale3731
@crystalwhale3731 4 года назад
Пойду учить питон
@wavka5126
@wavka5126 6 месяцев назад
Скипай сразу эту объектную муть и переходи на го
@ukratitelkisok9726
@ukratitelkisok9726 6 месяцев назад
​@@wavka5126скипай это шнягу без ооп и возвращайся в java там виртуальные потоки завезли)
@АндрейПрограммист-ж4т
Молодец!
@klmbss
@klmbss 7 месяцев назад
Главная суть доклада: "Дженерики в джава это не логичное, кривое и убогое дерьмо, для использования которых тебе нужно заучить наизусть кучу правил их использования, понаписать себе шпаргалок, конспектов и в котором до конца можно разобраться только если у тебя в голове свежий компилятор джава и ты знаешь все "нюансы" и прочие "подводные камни" этой недотехнологии которую из-за обратной совместимости внедряли по принципу ломаного костыля".
@tusman4ik
@tusman4ik 3 месяца назад
Ага) Строгая типизация? Не, не слышали!)
@sly-x86
@sly-x86 4 года назад
Может кто-то последний пример объяснить?
@Vitek_23
@Vitek_23 Год назад
👍за доклад!👎за то, что обрезали объяснение последнего примера.
@ArtemKropotov-o4n
@ArtemKropotov-o4n 3 года назад
List
@prianichnikov
@prianichnikov 3 года назад
Т.к. информация о типах стирается, компилятор ничего не знает о том какого типа объект нам вернет итератор коллекции list (String или наследника, upd: String или родителя). Соответственно он разрешает вернуть объект более общего типа, т.е. типа Object. Поэтому если заменить в foreach тип String на Object, то код скомпилируется, например: List
@manOfPlanetEarth
@manOfPlanetEarth 3 года назад
@@prianichnikov "String или наследника"
@prianichnikov
@prianichnikov 3 года назад
@@manOfPlanetEarth Спасибо за замечение, да, все верно "String или родителя". Касательно второго пункта, тоже верно, но даже если заменить super на extended, то никакой ошибки тут не будет, т.к. синтаксически такая конструкция будет абсолютно верна.
@manOfPlanetEarth
@manOfPlanetEarth 3 года назад
@@prianichnikov Максим, на самом деле я новичок и ни черта не понял кейс, который начали разбирать с 20:00. Вот вообще. Я уже 2 раза читал про дженерики и все равно не понимаю почему все эти присвоения нельзя делать. А понять хочу. У вас есть понимание этого момента?🤔 upd. упс. я перечитал ваш первый комментарий в этой ветке и кажись что-то стало проясняться... офигеть... не присвоения, а ДОБАВЛЕНИЯ!!!!...
@PredatorAlpha2
@PredatorAlpha2 3 года назад
Потому что List
@ДмитрийРафалович-ц6ш
Не очень понятен момент, где Object o = new Binary().get(); Почему здесь Error? Разве String не запишется в Object?
@EkaterinaGrebtsova
@EkaterinaGrebtsova 6 лет назад
Идея в том, что мы отдельно копилируем класс Binary и подкладываем скомпилированый класс к предыдущей скомпилированной версии класса BinaryMain - у того в таблице методов нет метода, возвращающего String, а есть метод возвращающий Object.
@andrei-pastushenko
@andrei-pastushenko 4 года назад
@@EkaterinaGrebtsova Ничего не понятно, но очень интересно. ©
@rustemgaliev3285
@rustemgaliev3285 4 года назад
@@ИгорьВойтович-р2к мб поздно уже, но возможно будет полезно читающим сейчас. Когда ты вызываешь метод изначально, у тебя в байткоде будет что-то такое: INVOKEVIRTUAL Binary get()Ljava/lang/Object; После рекомпиляции Binary дескриптор метода будет уже таким: get()Ljava/lang/String; Но BinaryMain так и оставит у себя в байткоде старый дескриптор (get()Ljava/lang/Object), по нему мы метод не найдем, так как мы поменяли возвращаемый тип в get. Касательно того, как это применимо к видео: Если бы мы сделали у Collections границу просто
@Vitek_23
@Vitek_23 Год назад
Добавлю к ответу@@rustemgaliev3285 , что при компиляции BinaryMain сохраняет у себя дескриптор от Binary. Т.е. при изменении Binary надо перекомпилировать BinaryMain, чтобы он нужный дескриптор подхватил. В общем, данное усложнение с extends Object нужно только для поддержки всего старого кода и любой новый код так писать не надо.
@БорисИванов-я9м
Какого хрена ведущий не дал последний пример обсудить?
@uladzislau.radkevich
@uladzislau.radkevich 6 лет назад
кто-нибудь может объяснить первый вопрос, как мы можем сделать throw дженерика вместо exception?
@Mike_x64
@Mike_x64 3 года назад
public static void thr(Supplier src) throws E { throw src.get(); }
@ВасильМихальчук-ж7т
це було гарно
@ArtemSerov
@ArtemSerov Год назад
Почему-то докладчик называет "дженериком" параметр тип, который указывается в угловых скобках... Параметр тип - это НЕ дженерик!!! Дженерик - это тот первоначальный непараметризованный тип + параметр тип!!! Container - вся эта запись целиком является дженериком, но никак не взятый сам по себе...
@John.Constantine.777
@John.Constantine.777 7 месяцев назад
массив листов стрингов нельзя создать? компилятор java не согласен с данным утверждением. public static void run(List ... data) { for (List x : data) for (String y : x) System.out.print(y + ", "); вполне принимает несколько списков со строками и выводит в консоль результат. если автор пытался вместо списка строк закинуть список чисел, то это уже не та история...
@Beetle_in_the_Anthill
@Beetle_in_the_Anthill 10 месяцев назад
1:09 чупакабра
@spirridd
@spirridd 3 года назад
Невероятно бесполезный доклад, если вы ещё не владеете дженериками как докладчик.
@opalev
@opalev Год назад
ну вообще доклады для разного уровня разработчиков существуют. можно посмотреть что-то другое.
Далее
🖤
00:18
Просмотров 413 тыс.
Avaz Oxun - Turqi sovuq kal
14:50
Просмотров 262 тыс.
Тагир Валеев - Причуды Stream API
1:00:03
Многопоточность в Java: основы
1:23:05
Транзакции - Spring Framework в деталях
1:20:21
Java #6. Generics
1:12:49
Просмотров 7 тыс.