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

Поділитися
Вставка
  • Опубліковано 4 лис 2020
  • Программу данного курса вы можете посмотреть по ссылке - docs.google.com/document/d/1H...
    Начиная с Java 1.8 в Java появляется концепция функционального интерфейса.
    Функциональный интерфейс - интерфейс содержащий один абстрактный метод.
    Наличие одного абстрактного метода - это единственное условие, таким образом
    функциональный интерфейс может содержать так же произвольное количество default и
    static методов.
    Ссылка на конспект этой лекции - drive.google.com/file/d/1GEs3...

КОМЕНТАРІ • 57

  • @borissharin
    @borissharin Рік тому +10

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

  • @user-ku6lc8zu4b
    @user-ku6lc8zu4b 3 роки тому +11

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

  • @EdwardNorthwind
    @EdwardNorthwind Рік тому +1

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

  • @india23061974
    @india23061974 Рік тому +2

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

  • @dmitrelkin9256
    @dmitrelkin9256 2 роки тому +4

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

  • @nadiiar75
    @nadiiar75 2 роки тому +15

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

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 роки тому +1

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

  • @user-gv3zn1us6s
    @user-gv3zn1us6s Рік тому +1

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

  • @anastasiyachibisova2496
    @anastasiyachibisova2496 Рік тому +1

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

  • @akaleks82
    @akaleks82 11 місяців тому +1

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

  • @yauheni3400
    @yauheni3400 Рік тому +2

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

  • @jevgenijkornev3641
    @jevgenijkornev3641 2 роки тому +2

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

  • @glebprotasov9499
    @glebprotasov9499 3 роки тому +2

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

  • @R0MaNbI4-
    @R0MaNbI4- 2 роки тому

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

  • @user-yv1bx7ht9f
    @user-yv1bx7ht9f 3 роки тому +2

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

  • @zagboris
    @zagboris 2 роки тому

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

  • @tkr4961
    @tkr4961 Рік тому

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

  • @jiy4e3aphbiu
    @jiy4e3aphbiu 2 роки тому

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

  • @darkday0000
    @darkday0000 2 роки тому

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

  • @godzosioda
    @godzosioda 4 місяці тому

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

  • @pawsdev
    @pawsdev 2 роки тому

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

  • @SvetlanaCapri
    @SvetlanaCapri Рік тому

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

  • @user-alex33333
    @user-alex33333 2 роки тому

    Оч круто!

  • @nikitamarsaghin3419
    @nikitamarsaghin3419 Рік тому

    Спасибо

  • @olyalya9651
    @olyalya9651 Рік тому

    Спасибо!!!

  • @user-ig3db7fp6k
    @user-ig3db7fp6k Рік тому

    👍

  • @user-zc7ym5pr7e
    @user-zc7ym5pr7e 2 роки тому +1

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

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 роки тому

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

    • @user-zc7ym5pr7e
      @user-zc7ym5pr7e 2 роки тому

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

  • @rollingdice
    @rollingdice 2 роки тому

    awesome

  • @user-jf2gx5wy2z
    @user-jf2gx5wy2z 7 місяців тому

    "Функциональные интерфейсы. Ссылки на методы"
    В доданному до в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). Зручно вивчати!

  • @user-mb1cs1rd2q
    @user-mb1cs1rd2q Місяць тому

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

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  Місяць тому

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

  • @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

  • @haykkyureghyan8349
    @haykkyureghyan8349 Рік тому

    30:30 imprtant

  • @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, тк у вас пример интерфейса с одним параметром в абстрактном методе, а не двумя, а я видел только с двумя. Было полезно обдумать сегодня этот случай заново. Расширить свои горизонты:)) Ложная тревога, отбой:)
      👍🏼

  • @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) всего один ТОГДА НЕСОВПАДЕНИЕ СИГНАТУР ПОЛУЧАЕТСЯ? извините,конечно,за столь глупый вопрос.Поставил себе цель через полгода устроиться джуном , стараюсь каждую мелочь копать до конца,что меня конечно тормозит ,иногда лучше бросить вопрос и вернуться потом к нему,но вот прям спать не дает этот вопрос, ответьте пожалуйста,если не сложно.

  • @valentinaboiko6060
    @valentinaboiko6060 5 місяців тому

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

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  5 місяців тому +1

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

    • @valentinaboiko6060
      @valentinaboiko6060 5 місяців тому

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

  • @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 в явном виде. В таком случае количество аргументов выравнивается.

  • @manOfPlanetEarth
    @manOfPlanetEarth 2 роки тому

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

    • @manOfPlanetEarth
      @manOfPlanetEarth 2 роки тому

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

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  2 роки тому +1

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

  • @vladbabenko3937
    @vladbabenko3937 Рік тому

    ЯВА

  • @lord-hh1dk
    @lord-hh1dk Рік тому

    Ява?