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

แชร์
ฝัง

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

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

    Нелогичные - это точно. Я всё пытаюсь как-то понять, как они работают, а не просто заучить, и становится еще хуже. Лекция всё равно хорошая, спасибо.

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

      параметризованной с wildcard коллекции в один момент можно присвоить одно, а в следующий - что-то иное, поэтому мы ищем общую "нижнюю" границу, удовлетворяющую всем возможным присвоениям

  • @RuslanSolovev-j6w
    @RuslanSolovev-j6w 8 ปีที่แล้ว +25

    Отличный доклад. Можно ли все-таки пояснить последний момент со String'ом? К сожалению, обсуждение прервали на самом интересном месте.

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

    Пойду учить питон

    • @wavka5126
      @wavka5126 10 หลายเดือนก่อน +1

      Скипай сразу эту объектную муть и переходи на го

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

      ​@@wavka5126скипай это шнягу без ооп и возвращайся в java там виртуальные потоки завезли)

  • @АндрейПрограммист85
    @АндрейПрограммист85 5 หลายเดือนก่อน

    Молодец!

  • @sly-x86
    @sly-x86 4 ปีที่แล้ว +2

    Может кто-то последний пример объяснить?

  • @ДмитрийРафалович-ц6ш
    @ДмитрийРафалович-ц6ш 6 ปีที่แล้ว +2

    Не очень понятен момент, где Object o = new Binary().get();
    Почему здесь Error? Разве String не запишется в Object?

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

      Идея в том, что мы отдельно копилируем класс Binary и подкладываем скомпилированый класс к предыдущей скомпилированной версии класса BinaryMain - у того в таблице методов нет метода, возвращающего String, а есть метод возвращающий Object.

    • @andrei-pastushenko
      @andrei-pastushenko 4 ปีที่แล้ว +1

      @@EkaterinaGrebtsova Ничего не понятно, но очень интересно. ©

    • @rustemgaliev3285
      @rustemgaliev3285 4 ปีที่แล้ว +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 нужно только для поддержки всего старого кода и любой новый код так писать не надо.

  • @ArtemKropotov-o4n
    @ArtemKropotov-o4n 4 ปีที่แล้ว +1

    List

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

      Т.к. информация о типах стирается, компилятор ничего не знает о том какого типа объект нам вернет итератор коллекции list (String или наследника, upd: String или родителя). Соответственно он разрешает вернуть объект более общего типа, т.е. типа Object. Поэтому если заменить в foreach тип String на Object, то код скомпилируется, например:
      List

    • @manOfPlanetEarth
      @manOfPlanetEarth 4 ปีที่แล้ว

      @@prianichnikov
      "String или наследника"

    • @prianichnikov
      @prianichnikov 4 ปีที่แล้ว

      @@manOfPlanetEarth Спасибо за замечение, да, все верно "String или родителя".
      Касательно второго пункта, тоже верно, но даже если заменить super на extended, то никакой ошибки тут не будет, т.к. синтаксически такая конструкция будет абсолютно верна.

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

      @@prianichnikov
      Максим, на самом деле я новичок и ни черта не понял кейс, который начали разбирать с 20:00. Вот вообще. Я уже 2 раза читал про дженерики и все равно не понимаю почему все эти присвоения нельзя делать. А понять хочу. У вас есть понимание этого момента?🤔
      upd. упс. я перечитал ваш первый комментарий в этой ветке и кажись что-то стало проясняться... офигеть... не присвоения, а ДОБАВЛЕНИЯ!!!!...

    • @PredatorAlpha2
      @PredatorAlpha2 3 ปีที่แล้ว

      Потому что List

  • @uladzislau.radkevich
    @uladzislau.radkevich 6 ปีที่แล้ว

    кто-нибудь может объяснить первый вопрос, как мы можем сделать throw дженерика вместо exception?

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

      public static void thr(Supplier src) throws E {
      throw src.get();
      }

  • @ВасильМихальчук-ж7т
    @ВасильМихальчук-ж7т ปีที่แล้ว

    це було гарно

  • @John.Constantine.777
    @John.Constantine.777 10 หลายเดือนก่อน

    массив листов стрингов нельзя создать?
    компилятор java не согласен с данным утверждением.
    public static void run(List ... data) {
    for (List x : data)
    for (String y : x)
    System.out.print(y + ", ");
    вполне принимает несколько списков со строками и выводит в консоль результат.
    если автор пытался вместо списка строк закинуть список чисел, то это уже не та история...

  • @Vitek_23
    @Vitek_23 ปีที่แล้ว

    👍за доклад!👎за то, что обрезали объяснение последнего примера.

  • @БорисИванов-я9м
    @БорисИванов-я9м 2 ปีที่แล้ว +3

    Какого хрена ведущий не дал последний пример обсудить?

  • @ArtemSerov
    @ArtemSerov 2 ปีที่แล้ว

    Почему-то докладчик называет "дженериком" параметр тип, который указывается в угловых скобках... Параметр тип - это НЕ дженерик!!! Дженерик - это тот первоначальный непараметризованный тип + параметр тип!!! Container - вся эта запись целиком является дженериком, но никак не взятый сам по себе...

  • @Beetle_in_the_Anthill
    @Beetle_in_the_Anthill ปีที่แล้ว

    1:09 чупакабра

  • @klmbss
    @klmbss 10 หลายเดือนก่อน +4

    Главная суть доклада: "Дженерики в джава это не логичное, кривое и убогое дерьмо, для использования которых тебе нужно заучить наизусть кучу правил их использования, понаписать себе шпаргалок, конспектов и в котором до конца можно разобраться только если у тебя в голове свежий компилятор джава и ты знаешь все "нюансы" и прочие "подводные камни" этой недотехнологии которую из-за обратной совместимости внедряли по принципу ломаного костыля".

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

      Ага) Строгая типизация? Не, не слышали!)

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

    Невероятно бесполезный доклад, если вы ещё не владеете дженериками как докладчик.

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

      ну вообще доклады для разного уровня разработчиков существуют.
      можно посмотреть что-то другое.