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

  Рет қаралды 11,008

Oleksandr Tsymbaliuk

Oleksandr Tsymbaliuk

3 жыл бұрын

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

Пікірлер: 57
@borissharin
@borissharin Жыл бұрын
Наверное, мне придётся пересмотреть это видео раз 20, чтобы понять его смысл полностью. Но! Это точно самое полезное видео по этой тебе. Даже после первого раза, мне было местами понятно. Спасибо вам!
@user-ku6lc8zu4b
@user-ku6lc8zu4b 3 жыл бұрын
Тема не из простых, но очень профессионально и понятно объясняете. Спасибо за урок!
@india23061974
@india23061974 Жыл бұрын
Обалденная лекция, усвоить с первого раза сложно. Но столько примеров, Думаю, в два -три повтора смогу разобраться ) Спасибо!
@EdwardNorthwind
@EdwardNorthwind Жыл бұрын
Это, наверное, самый полный и подробный разбор, что я смотрел. И даже так придется знатно переформатировать сознание, чтобы перестать думать объектами, и начать подкидывать ссылки на методы.
@dmitrelkin9256
@dmitrelkin9256 2 жыл бұрын
Александр, спасибо! очень долго не понимал как реализованы ссылки на методы - с вашей помощью победил эту тему. Еще раз спасибо за понятное объяснение.
@anastasiyachibisova2496
@anastasiyachibisova2496 Жыл бұрын
Самое лучшее обьяснение ссылки на метод, спасибо!
@user-gv3zn1us6s
@user-gv3zn1us6s Жыл бұрын
Захватывающая лекция. Многовато для одной, но очень интересно. Две лекции из одной - в самый раз. Подписка
@akaleks82
@akaleks82 11 ай бұрын
Это лучшее объяснение! Я наконец-то понял ФИ!
@yauheni3400
@yauheni3400 Жыл бұрын
Спасибо! Классная подача информации.
@nadiiar75
@nadiiar75 2 жыл бұрын
Вы преподаватель с большой буквы! Спасибо вам большое. В это не лёгкое время , душа радуется, что в Украине есть такие потрясающие преподаватели, которые продолжают нести свой труд в массы! 🇺🇦 🙏
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 жыл бұрын
Большое вам спасибо за высокую оценку моей работы.
@jevgenijkornev3641
@jevgenijkornev3641 2 жыл бұрын
Нереально круто! Спасибо!
@glebprotasov9499
@glebprotasov9499 3 жыл бұрын
Очень доступно и понятно, спасибо.
@R0MaNbI4-
@R0MaNbI4- 2 жыл бұрын
Большое спасибо за проделанную работу. Очень доходчиво. Читал Шилдта и на моменте с использованием нестатического метода любого объекта поплыл, пришлось гуглить
@user-yv1bx7ht9f
@user-yv1bx7ht9f 3 жыл бұрын
Все супер, спасибо)
@zagboris
@zagboris 2 жыл бұрын
Отличное объяснение!
@jiy4e3aphbiu
@jiy4e3aphbiu 2 жыл бұрын
ВЕЛИКОЛЕПНО!
@tkr4961
@tkr4961 Жыл бұрын
Очень доступно,большое спасибо
@darkday0000
@darkday0000 2 жыл бұрын
Лайк и комментарий в поддержку канала)
@pawsdev
@pawsdev 2 жыл бұрын
Шикарно, лучшее что я видел по этому убогому языку, спасибо!!!
@nikitamarsaghin3419
@nikitamarsaghin3419 Жыл бұрын
Спасибо
@user-alex33333
@user-alex33333 2 жыл бұрын
Оч круто!
@SvetlanaCapri
@SvetlanaCapri Жыл бұрын
Спасибо Большое
@godzosioda
@godzosioda 3 ай бұрын
Самое полное и краткое обьяснение на русском языке, которое я встречал! Большое спасибо!
@olyalya9651
@olyalya9651 Жыл бұрын
Спасибо!!!
@user-ig3db7fp6k
@user-ig3db7fp6k Жыл бұрын
👍
@user-zc7ym5pr7e
@user-zc7ym5pr7e 2 жыл бұрын
Спасибо за лекцию! Подскажите, пожалуйста, а что означает в методе public static void saveToFile(T el) ?
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 жыл бұрын
Добрый день. Это параметр типа. Метод обобщенный и в нем используется такой параметр типа как T. Если эта тема вам незнакома то посмотрите в сторону дженериков.
@user-zc7ym5pr7e
@user-zc7ym5pr7e 2 жыл бұрын
@@oleksandrtsymbaliuk Благодарю за ответ! Стало ясно, в какую сторону искать
@user-mb1cs1rd2q
@user-mb1cs1rd2q Ай бұрын
У меня мозги вытекли от сложности, но понимаю, что это важно. Буду просматривать несколько раз. А есть ли у Вас упражнения?
@oleksandrtsymbaliuk
@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). Зручно вивчати!
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
19:45 Можно добавить, так можно создать только одномерный масив. Как я понял, многомерные нельзя так создавать (чз method reference).
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 жыл бұрын
Ну почему же. Многомерные массивы, все равно по сути одномерные (например 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 жыл бұрын
Спасибо за высокую оценку моей работы. А вот курсов у меня нет. Просто лекции в открытом доступе доступные всем.
@DimaMsuVmk
@DimaMsuVmk 2 жыл бұрын
​@@oleksandrtsymbaliuk Единственный вопрос возник при передачи ссылки на Нестатический метод Произвольного объекта: в интерфейсе в сигнатуре у метода int getNextElement(IntGenerator gen) один параметр, а в ссылке на метод в методе нет параметров-вы говорите там есть по умолчанию неявный параметр THIS.Хорошо,тогда,раз уж на то пошло, в метод int getNextElement(IntGenerator this, IntGenerator gen) тоже можно добавить неявный параметр this и получится теперь в этой сигнатуре ДВА параметра , а в методе int Next(IntGenerator this) всего один ТОГДА НЕСОВПАДЕНИЕ СИГНАТУР ПОЛУЧАЕТСЯ? извините,конечно,за столь глупый вопрос.Поставил себе цель через полгода устроиться джуном , стараюсь каждую мелочь копать до конца,что меня конечно тормозит ,иногда лучше бросить вопрос и вернуться потом к нему,но вот прям спать не дает этот вопрос, ответьте пожалуйста,если не сложно.
@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 жыл бұрын
Так это наоборот вызов обычного метода по классу. Т.е. это случай (в ваших обозначениях) Class:: objectMethod. Это то как раз описано и в конспекте и в видео. Мне вот этот случай интересен Object::classMethod.
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
@@oleksandrtsymbaliuk Разобрался. Вы правы! Действительно существует только три варианта, четвертого не существует. Не признал у вас единственно возможный перекрестный вариант Class::objectMethod, тк у вас пример интерфейса с одним параметром в абстрактном методе, а не двумя, а я видел только с двумя. Было полезно обдумать сегодня этот случай заново. Расширить свои горизонты:)) Ложная тревога, отбой:) 👍🏼
@haykkyureghyan8349
@haykkyureghyan8349 Жыл бұрын
30:30 imprtant
@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 5 ай бұрын
Не совсем понимаю различие способов "не статический метод конкретного объекта" и "нестатические метод любого объекта". Во втором способе тоже создается по итогу объект конкретного класса. в чем различие? Спасибо
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 5 ай бұрын
Разница в том, что "не статический метод конкретного объекта" - работает с вполне определенным объектом этого класса и только с его состоянием. В то же время "нестатические метод любого объекта" позволяет работать с ЛЮБЫМ объектом этого класса (и его подклассов соответственно) и использовать состояние любого подставленного объекта, что дает больше возможностей (правда и сложность восприятия возрастает, что не всегда плюс).
@valentinaboiko6060
@valentinaboiko6060 5 ай бұрын
@@oleksandrtsymbaliuk да, теперь дошло ) спасибо
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
15:32 А я и не знал этого:))) Дядь Саша, а как это можно было узнать?🤔🙂
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
Это только в методах без аргументов так или в методы с аргументами так же дописывается в начале? и в чем смысл этой дописки? В теле метода для этой дописки есть своя дописка или этот аргумент идет без использования в теле?
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 жыл бұрын
Это же механизм связи объекта с методом. Так происходит во всех методах объекта (не статических) хоть с параметрами хоть без. Ведь методы (и обычные и статические) принадлежат классу и хранятся в Metaspace. А объекты то создаются в Heap. А как методу из одной области памяти, получить доступ к объекту в другой? Только посредством ссылки на объект передаваемой методу при вызове. И это и есть ссылка this (неявный первый аргумент метода подставляемый компилятором).
@vladbabenko3937
@vladbabenko3937 Жыл бұрын
ЯВА
@lord-hh1dk
@lord-hh1dk Жыл бұрын
Ява?
Лямбда функции
22:42
Oleksandr Tsymbaliuk
Рет қаралды 3,6 М.
Please be kind🙏
00:34
ISSEI / いっせい
Рет қаралды 187 МЛН
Khó thế mà cũng làm được || How did the police do that? #shorts
01:00
small vs big hoop #tiktok
00:12
Анастасия Тарасова
Рет қаралды 25 МЛН
Lambda выражения. Часть 1 (прокачанная Java)
32:00
Програмания
Рет қаралды 23 М.
Java. Лямбда-выражения.
23:47
Sergey Arkhipov Java Tutorials
Рет қаралды 32 М.
Stream API. Java. Максимально простым языком.
21:36
Игорь Мешалкин
Рет қаралды 28 М.
__new__ или __init__ в Python? Знаете ли вы это..
12:37
Многопоточность в Java: основы
1:23:05
Computer Science Center
Рет қаралды 111 М.
Please be kind🙏
00:34
ISSEI / いっせい
Рет қаралды 187 МЛН