Тёмный

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

Oleksandr Tsymbaliuk
Подписаться 6 тыс.
Просмотров 12 тыс.
50% 1

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

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

 

29 сен 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 56   
@borissharin
@borissharin Год назад
Наверное, мне придётся пересмотреть это видео раз 20, чтобы понять его смысл полностью. Но! Это точно самое полезное видео по этой тебе. Даже после первого раза, мне было местами понятно. Спасибо вам!
@АлександрГригоренко-г8к
Тема не из простых, но очень профессионально и понятно объясняете. Спасибо за урок!
@cnjk-t5b
@cnjk-t5b 10 месяцев назад
"Функциональные интерфейсы. Ссылки на методы" В доданному до в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). Зручно вивчати!
@dmitrelkin9256
@dmitrelkin9256 2 года назад
Александр, спасибо! очень долго не понимал как реализованы ссылки на методы - с вашей помощью победил эту тему. Еще раз спасибо за понятное объяснение.
@india23061974
@india23061974 Год назад
Обалденная лекция, усвоить с первого раза сложно. Но столько примеров, Думаю, в два -три повтора смогу разобраться ) Спасибо!
@godzosioda
@godzosioda 6 месяцев назад
Самое полное и краткое обьяснение на русском языке, которое я встречал! Большое спасибо!
@nadiiar75
@nadiiar75 2 года назад
Вы преподаватель с большой буквы! Спасибо вам большое. В это не лёгкое время , душа радуется, что в Украине есть такие потрясающие преподаватели, которые продолжают нести свой труд в массы! 🇺🇦 🙏
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 года назад
Большое вам спасибо за высокую оценку моей работы.
@yauheni3400
@yauheni3400 Год назад
Спасибо! Классная подача информации.
@АйданаЖузонбаев
@АйданаЖузонбаев 4 месяца назад
У меня мозги вытекли от сложности, но понимаю, что это важно. Буду просматривать несколько раз. А есть ли у Вас упражнения?
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 4 месяца назад
Да в лекция далее в конце содержатся практические задания.
@Ren-z5m3t
@Ren-z5m3t Год назад
Захватывающая лекция. Многовато для одной, но очень интересно. Две лекции из одной - в самый раз. Подписка
@EdwardNorthwind
@EdwardNorthwind Год назад
Это, наверное, самый полный и подробный разбор, что я смотрел. И даже так придется знатно переформатировать сознание, чтобы перестать думать объектами, и начать подкидывать ссылки на методы.
@haykkyureghyan8349
@haykkyureghyan8349 2 года назад
30:30 imprtant
@jevgenijkornev3641
@jevgenijkornev3641 2 года назад
Нереально круто! Спасибо!
@akaleks82
@akaleks82 Год назад
Это лучшее объяснение! Я наконец-то понял ФИ!
@anastasiyachibisova2496
@anastasiyachibisova2496 Год назад
Самое лучшее обьяснение ссылки на метод, спасибо!
@vladbabenko3937
@vladbabenko3937 2 года назад
ЯВА
@ДмитрийКоролев-к3о
Все супер, спасибо)
@glebprotasov9499
@glebprotasov9499 3 года назад
Очень доступно и понятно, спасибо.
@valentinaboiko6060
@valentinaboiko6060 8 месяцев назад
Не совсем понимаю различие способов "не статический метод конкретного объекта" и "нестатические метод любого объекта". Во втором способе тоже создается по итогу объект конкретного класса. в чем различие? Спасибо
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 8 месяцев назад
Разница в том, что "не статический метод конкретного объекта" - работает с вполне определенным объектом этого класса и только с его состоянием. В то же время "нестатические метод любого объекта" позволяет работать с ЛЮБЫМ объектом этого класса (и его подклассов соответственно) и использовать состояние любого подставленного объекта, что дает больше возможностей (правда и сложность восприятия возрастает, что не всегда плюс).
@valentinaboiko6060
@valentinaboiko6060 8 месяцев назад
@@oleksandrtsymbaliuk да, теперь дошло ) спасибо
@АнаАна-п3р
@АнаАна-п3р 2 года назад
Спасибо за лекцию! Подскажите, пожалуйста, а что означает в методе public static void saveToFile(T el) ?
@oleksandrtsymbaliuk
@oleksandrtsymbaliuk 2 года назад
Добрый день. Это параметр типа. Метод обобщенный и в нем используется такой параметр типа как T. Если эта тема вам незнакома то посмотрите в сторону дженериков.
@АнаАна-п3р
@АнаАна-п3р 2 года назад
@@oleksandrtsymbaliuk Благодарю за ответ! Стало ясно, в какую сторону искать
@pawsdev
@pawsdev 2 года назад
Шикарно, лучшее что я видел по этому убогому языку, спасибо!!!
@R0MaNbI4-
@R0MaNbI4- 3 года назад
Большое спасибо за проделанную работу. Очень доходчиво. Читал Шилдта и на моменте с использованием нестатического метода любого объекта поплыл, пришлось гуглить
@rollingdice
@rollingdice 2 года назад
awesome
@darkday0000
@darkday0000 3 года назад
Лайк и комментарий в поддержку канала)
@tkr4961
@tkr4961 Год назад
Очень доступно,большое спасибо
@SvetlanaCapri
@SvetlanaCapri Год назад
Спасибо Большое
@zagboris
@zagboris 2 года назад
Отличное объяснение!
@nikitamarsaghin3419
@nikitamarsaghin3419 Год назад
Спасибо
@olyalya9651
@olyalya9651 2 года назад
Спасибо!!!
@jiy4e3aphbiu
@jiy4e3aphbiu 3 года назад
ВЕЛИКОЛЕПНО!
@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 года назад
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 года назад
Единственный вопрос возник при передачи ссылки на Нестатический метод Произвольного объекта: в интерфейсе в сигнатуре у метода 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 года назад
Это же механизм связи объекта с методом. Так происходит во всех методах объекта (не статических) хоть с параметрами хоть без. Ведь методы (и обычные и статические) принадлежат классу и хранятся в Metaspace. А объекты то создаются в Heap. А как методу из одной области памяти, получить доступ к объекту в другой? Только посредством ссылки на объект передаваемой методу при вызове. И это и есть ссылка 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, тк у вас пример интерфейса с одним параметром в абстрактном методе, а не двумя, а я видел только с двумя. Было полезно обдумать сегодня этот случай заново. Расширить свои горизонты:)) Ложная тревога, отбой:) 👍🏼
@lord-hh1dk
@lord-hh1dk Год назад
Ява?
Далее
Лямбда функции
22:42
Просмотров 3,7 тыс.
ТАРАКАН
00:38
Просмотров 855 тыс.
Inside Out 2: BABY JOY VS SHIN SONIC 4
00:16
Просмотров 4,6 млн
DAXSHAT!!! Avaz Oxun sahnada yeg'lab yubordi
10:46
Просмотров 334 тыс.
Java. Лямбда-выражения.
23:47
Просмотров 34 тыс.
Раннее и Позднее Связывание
12:44
Просто о ООП (Парадигмы ООП)
21:14
ТАРАКАН
00:38
Просмотров 855 тыс.