[alishev] Java для начинающих. #26: Интерфейсы
Что такое Java и зачем он нужен
Это как JavaScript? Нет!
Программисты Java ценятся, они делают сложные проекты, особенно их любят в среде разработки под Android и в различных корпоративных сферах. Вот что это за язык и почему его стоит изучать...
🖥 Для чего нужны функциональные интерфейсы в Java? ⏩Зачем нужны функциональные интерфейсы, если вместо них можно использовать обычную функцию? Пример на картинке. Так в чем отличие функции от функционального интерфейса? Когда стоит применять функциональный интерфейс, а когда - функцию? ⏩Во-первых, существует функциональный подход (ФП) к программированию, при котором мы можем оперировать методами (функциями) как переменными. В Haskell, например, ФП встроен непосредственно, на синтаксическом уровне. Также в некоторых языках (C и C++) можно использовать ссылки на методы, не те, которые в Java, а настоящие ссылки. В Java нет ни того, ни другого, поэтому ФП в ней осуществляется посредством функциональных интерфейсов. Когда мы пишем что-то вроде (car) -> car.getOwner(); нам кажется, будто мы действительно объявляем функцию на месте и используем ФП. Но на деле для такой записи создаётся анонимный класс, расширяющий целевой интерфейс и реализующий метод в соответствии с тем, что написано после стрелки. Упомянутая ссылка на метод — это просто способ ещё более коротко и изящно записать лямбда-выражение. Например, строка выше могла бы выглядеть так: Car::getOwner Для чего всё это нужно? Например, есть у нас список автомобилей, и нам нужно его преобразовать в список владельцев. К примеру, используя Stream API. Очень грустно было бы для метода map() объявлять отдельный класс, имплементирующий целевой интерфейс и содержащий один простой метод, а потом в методе map() создавать объект от него с целью вызова этого самого метода. Гораздо лучше написать короткую лямбду или вовсе ссылку на метод. Использование лямбда-выражений сокращает и упрощает код, а также во многих случаях делает его более читаемым и выразительным. 📎 Читать подробнее @javarush