Функциональные интерфейсы Ссылки на методы.

Поделиться
HTML-код
  • Опубликовано: 21 сен 2024
  • Программу данного курса вы можете посмотреть по ссылке - docs.google.co...
    Начиная с Java 1.8 в Java появляется концепция функционального интерфейса.
    Функциональный интерфейс - интерфейс содержащий один абстрактный метод.
    Наличие одного абстрактного метода - это единственное условие, таким образом
    функциональный интерфейс может содержать так же произвольное количество default и
    static методов.
    Ссылка на конспект этой лекции - drive.google.c...

Комментарии • 56

  • @borissharin
    @borissharin Год назад +10

    Наверное, мне придётся пересмотреть это видео раз 20, чтобы понять его смысл полностью. Но! Это точно самое полезное видео по этой тебе. Даже после первого раза, мне было местами понятно. Спасибо вам!

  • @АлександрГригоренко-г8к

    Тема не из простых, но очень профессионально и понятно объясняете. Спасибо за урок!

  • @nadiiar75
    @nadiiar75 2 года назад +13

    Вы преподаватель с большой буквы! Спасибо вам большое. В это не лёгкое время , душа радуется, что в Украине есть такие потрясающие преподаватели, которые продолжают нести свой труд в массы! 🇺🇦 🙏

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад +1

      Большое вам спасибо за высокую оценку моей работы.

  • @EdwardNorthwind
    @EdwardNorthwind Год назад +1

    Это, наверное, самый полный и подробный разбор, что я смотрел. И даже так придется знатно переформатировать сознание, чтобы перестать думать объектами, и начать подкидывать ссылки на методы.

  • @dmitrelkin9256
    @dmitrelkin9256 2 года назад +4

    Александр, спасибо! очень долго не понимал как реализованы ссылки на методы - с вашей помощью победил эту тему. Еще раз спасибо за понятное объяснение.

  • @india23061974
    @india23061974 Год назад +2

    Обалденная лекция, усвоить с первого раза сложно. Но столько примеров, Думаю, в два -три повтора смогу разобраться ) Спасибо!

  • @Ren-z5m3t
    @Ren-z5m3t Год назад +1

    Захватывающая лекция. Многовато для одной, но очень интересно. Две лекции из одной - в самый раз. Подписка

  • @anastasiyachibisova2496
    @anastasiyachibisova2496 Год назад +1

    Самое лучшее обьяснение ссылки на метод, спасибо!

  • @akaleks82
    @akaleks82 Год назад +1

    Это лучшее объяснение! Я наконец-то понял ФИ!

  • @yauheni3400
    @yauheni3400 Год назад +2

    Спасибо! Классная подача информации.

  • @jevgenijkornev3641
    @jevgenijkornev3641 2 года назад +2

    Нереально круто! Спасибо!

  • @R0MaNbI4-
    @R0MaNbI4- 2 года назад

    Большое спасибо за проделанную работу. Очень доходчиво.
    Читал Шилдта и на моменте с использованием нестатического метода любого объекта поплыл, пришлось гуглить

  • @glebprotasov9499
    @glebprotasov9499 3 года назад +2

    Очень доступно и понятно, спасибо.

  • @godzosioda
    @godzosioda 6 месяцев назад

    Самое полное и краткое обьяснение на русском языке, которое я встречал! Большое спасибо!

  • @ДмитрийКоролев-к3о
    @ДмитрийКоролев-к3о 3 года назад +2

    Все супер, спасибо)

  • @pawsdev
    @pawsdev 2 года назад

    Шикарно, лучшее что я видел по этому убогому языку, спасибо!!!

  • @nikitamarsaghin3419
    @nikitamarsaghin3419 Год назад

    Спасибо

  • @tkr4961
    @tkr4961 Год назад

    Очень доступно,большое спасибо

  • @darkday0000
    @darkday0000 3 года назад

    Лайк и комментарий в поддержку канала)

  • @zagboris
    @zagboris 2 года назад

    Отличное объяснение!

  • @jiy4e3aphbiu
    @jiy4e3aphbiu 3 года назад

    ВЕЛИКОЛЕПНО!

  • @ОлегЗаболотных-н5ф

    👍

  • @cnjk-t5b
    @cnjk-t5b 9 месяцев назад

    "Функциональные интерфейсы. Ссылки на методы"
    В доданному до вiдео pdf-файлi дивись сторiнку:
    page 10 (for Java 9, 10, 11, ...)
    List list = new ArrayList(List.of("Hello", "Cat", "Java", "Bag")); ,
    але починаючи з Java 8 можна так
    page 10
    List list = Arrays.asList("Hello", "Cat", "Java", "Bag");
    List list = new ArrayList(Arrays.asList("Hello", "Cat", "Java", "Bag"));
    Дякую за матерiал(video + pdf). Зручно вивчати!

  • @SvetlanaCapri
    @SvetlanaCapri Год назад

    Спасибо Большое

  • @olyalya9651
    @olyalya9651 2 года назад

    Спасибо!!!

  • @АйданаЖузонбаев
    @АйданаЖузонбаев 4 месяца назад

    У меня мозги вытекли от сложности, но понимаю, что это важно. Буду просматривать несколько раз. А есть ли у Вас упражнения?

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  4 месяца назад

      Да в лекция далее в конце содержатся практические задания.

  • @АнаАна-п3р
    @АнаАна-п3р 2 года назад +1

    Спасибо за лекцию!
    Подскажите, пожалуйста, а что означает в методе public static void saveToFile(T el) ?

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад

      Добрый день. Это параметр типа. Метод обобщенный и в нем используется такой параметр типа как T. Если эта тема вам незнакома то посмотрите в сторону дженериков.

    • @АнаАна-п3р
      @АнаАна-п3р 2 года назад

      @@oleksandrtsymbaliuk Благодарю за ответ! Стало ясно, в какую сторону искать

  • @manOfPlanetEarth
    @manOfPlanetEarth 2 года назад

    По итогам внимательного ознакомления с презентацией могу вот что сказать (ролик пока не смотрел) касательно ссылок на методы:
    Есть пара класс-объект и есть пара classMethod-objectMethod. Из их комбинации получается два базовых варианта:
    Class::classMethod и
    Oblect::objectMethod
    и два перекрестных варианта, которые надо обмозговать:
    Class::objectMethod (liked a lot the explanation)
    Object::classMethod.
    Так вот последний вариант какой-то мутный, я редко его вижу, и он, вроде, ссылается на метод с одним параметром, а передается эта ссылка в метод, у которого на входе функциональный интерфейс с абстрактным методом с двумя☝🏼☝🏼☝🏼 параметрами. И тут происходит определенная "магия".
    Так вот в презентации этот случай не увидел, остальные три увидел. Больше замечаний не имею. Всё остальное понравилось.
    Если наткнусь на пример при повторении - отпишусь сюда. Автор канала и знатоки могут писать сюда на опережение.
    ------
    Вообще по смыслу тема простейшая, но время от времени напрягает: мельтешня из интерфейсов, методов в интерфейсах, их параметров в виде других интерфейсов и ссылок на методы при использовании тех самых методов вводит в ступор.
    Видать, это антураж функциональщины- большая плотность смысла на объём кода: действие принимает действие, возвращает действие и так по кругу. Бррр.

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад

      А вот как получиться ссылку на статический метод, используя ссылку на объект я даже не знаю. Как то не задумывался, для меня всегда если метод статический то через класс. Так, что если действительно будет время и желание то укажите ссылку, где можно о этом прочесть.

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 года назад

      @@oleksandrtsymbaliuk
      там "магия" в том, что первый параметр из абстрактного метода становится объектом, на котором вызывается метод, указанный с помощью ::, со вторым параметром абстрактного метода функционального интерфейса. Если не ошибаюсь. Пока голову не забивайте. Как найду - напишу сюда пример и где прочитал.

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад +1

      Так это наоборот вызов обычного метода по классу. Т.е. это случай (в ваших обозначениях) Class:: objectMethod. Это то как раз описано и в конспекте и в видео. Мне вот этот случай интересен Object::classMethod.

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 года назад

      @@oleksandrtsymbaliuk
      Разобрался. Вы правы!
      Действительно существует только три варианта, четвертого не существует.
      Не признал у вас единственно возможный перекрестный вариант Class::objectMethod, тк у вас пример интерфейса с одним параметром в абстрактном методе, а не двумя, а я видел только с двумя. Было полезно обдумать сегодня этот случай заново. Расширить свои горизонты:)) Ложная тревога, отбой:)
      👍🏼

  • @haykkyureghyan8349
    @haykkyureghyan8349 2 года назад

    30:30 imprtant

  • @manOfPlanetEarth
    @manOfPlanetEarth 2 года назад

    19:45
    Можно добавить, так можно создать только одномерный масив. Как я понял, многомерные нельзя так создавать (чз method reference).

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад +1

      Ну почему же. Многомерные массивы, все равно по сути одномерные (например 2-х мерные массивы, это одномерные массивы ссылок на одномерные массивы и т.д.). Так, что очень даже легко создаются например 2-х мерные. Вт пример:
      package sample;
      import java.util.Arrays;
      @FunctionalInterface
      interface Generator {
      public Object createNewObject(int size);
      }
      public class Main {
      public static void main(String[] args) {
      Generator gen = int[][]::new;
      int[][] a = (int[][]) gen.createNewObject(10);
      for (int i = 0; i < a.length; i++) {
      a[i] = new int[10];
      for (int j = 0; j < a.length; j++) {
      a[i][j] = i + j;
      }
      }
      for (int[] row : a) {
      System.out.println(Arrays.toString(row));
      }
      }
      }

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 года назад

      @@oleksandrtsymbaliuk
      Ого!!! Вот это красота!:) Постараюсь запомнить. То ли забыл, то ли и не знал:)
      Только если у нас не квадрат, то, пожалуй, во втором цикле лучше писать j

  • @DimaMsuVmk
    @DimaMsuVmk 2 года назад

    ахуеть , ЭТО ЛУЧШЕЕ ВИДЕО по этой теме,какой же вы умный,я хочу у вас учиться, может у вас есть какойто курс с личной поддержкой?

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад +1

      Спасибо за высокую оценку моей работы. А вот курсов у меня нет. Просто лекции в открытом доступе доступные всем.

    • @DimaMsuVmk
      @DimaMsuVmk 2 года назад

      ​@@oleksandrtsymbaliuk Единственный вопрос возник при передачи ссылки на Нестатический метод Произвольного объекта: в интерфейсе в сигнатуре у метода int getNextElement(IntGenerator gen) один параметр, а в ссылке на метод в методе нет параметров-вы говорите там есть по умолчанию неявный параметр THIS.Хорошо,тогда,раз уж на то пошло, в метод int getNextElement(IntGenerator this, IntGenerator gen) тоже можно добавить неявный параметр this и получится теперь в этой сигнатуре ДВА параметра , а в методе int Next(IntGenerator this) всего один ТОГДА НЕСОВПАДЕНИЕ СИГНАТУР ПОЛУЧАЕТСЯ? извините,конечно,за столь глупый вопрос.Поставил себе цель через полгода устроиться джуном , стараюсь каждую мелочь копать до конца,что меня конечно тормозит ,иногда лучше бросить вопрос и вернуться потом к нему,но вот прям спать не дает этот вопрос, ответьте пожалуйста,если не сложно.

  • @rollingdice
    @rollingdice 2 года назад

    awesome

  • @DimaMsuVmk
    @DimaMsuVmk 2 года назад

    Единственный вопрос возник при передачи ссылки на Нестатический метод Произвольного объекта: в интерфейсе в сигнатуре у метода int getNextElement(IntGenerator gen) один параметр, а в ссылке на метод в методе нет параметров-вы говорите там есть по умолчанию неявный параметр THIS.Хорошо,тогда,раз уж на то пошло, в метод int getNextElement(IntGenerator this, IntGenerator gen) тоже можно добавить неявный параметр this и получится теперь в этой сигнатуре ДВА параметра , а в методе int Next(IntGenerator this) всего один

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад

      Добрый день. Нет так сделать нельзя. Дело в том что параметр this может автоматически подставляться компилятором или указываться явно. Если он указан явно, то компилятором он автоматически не подставляется и наоборот. Поэтому предложенный вами способ невозможен в Java в принципе.

    • @DimaMsuVmk
      @DimaMsuVmk 2 года назад

      @@oleksandrtsymbaliuk насколько я понял this подставляется неявно всегда(если не указан явно) , тогда если в одном методе было 0 параметров , а в другом 1,то если учесть неявный this, тогда в первом методе next будет 1 параметры, а в методе интерфейса 2 , опять получили Не равное количество

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад

      @@DimaMsuVmk Насколько я понимаю в таких случаях (ссылка на не статический метод объекта через имя класса) работает механизм подобный использованию ссылки на статический метод через имя класса, т. е. нужно указывать аналог this в явном виде. В таком случае количество аргументов выравнивается.

  • @valentinaboiko6060
    @valentinaboiko6060 8 месяцев назад

    Не совсем понимаю различие способов "не статический метод конкретного объекта" и "нестатические метод любого объекта". Во втором способе тоже создается по итогу объект конкретного класса. в чем различие? Спасибо

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  8 месяцев назад +1

      Разница в том, что "не статический метод конкретного объекта" - работает с вполне определенным объектом этого класса и только с его состоянием. В то же время "нестатические метод любого объекта" позволяет работать с ЛЮБЫМ объектом этого класса (и его подклассов соответственно) и использовать состояние любого подставленного объекта, что дает больше возможностей (правда и сложность восприятия возрастает, что не всегда плюс).

    • @valentinaboiko6060
      @valentinaboiko6060 7 месяцев назад

      @@oleksandrtsymbaliuk да, теперь дошло ) спасибо

  • @manOfPlanetEarth
    @manOfPlanetEarth 2 года назад

    15:32
    А я и не знал этого:)))
    Дядь Саша, а как это можно было узнать?🤔🙂

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 года назад

      Это только в методах без аргументов так или в методы с аргументами так же дописывается в начале? и в чем смысл этой дописки? В теле метода для этой дописки есть своя дописка или этот аргумент идет без использования в теле?

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 года назад +1

      Это же механизм связи объекта с методом. Так происходит во всех методах объекта (не статических) хоть с параметрами хоть без. Ведь методы (и обычные и статические) принадлежат классу и хранятся в Metaspace. А объекты то создаются в Heap. А как методу из одной области памяти, получить доступ к объекту в другой? Только посредством ссылки на объект передаваемой методу при вызове. И это и есть ссылка this (неявный первый аргумент метода подставляемый компилятором).

  • @vladbabenko3937
    @vladbabenko3937 Год назад

    ЯВА

  • @lord-hh1dk
    @lord-hh1dk Год назад

    Ява?