Функциональные интерфейсы.JAVA Flashcards

1
Q

Что такое функциональный интерфейс?

A

Функциональный интерфейс - это интерфейс, который определяет только один абстрактный метод.

Основное назначение – использование в лямбда выражениях и method reference.

Интерфейс может включать сколько угодно default методов и при этом оставаться функциональным,потому что default методы - не абстрактные.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Для чего нужна аннотация @FunctionalInterface?

A

Чтобы точно определить интерфейс как функциональный, добавлена аннотация @FunctionalInterface,работающая по принципу @Override. Она обозначит замысел и не даст определить второй абстрактный метод в интерфейсе.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какие встроенные функциональные интерфейсы вы знаете?

A

Встроенные функциональные интерфейсы:

Predicate<T> Проверяет соблюдение некоторого условия. Если оно соблюдается, то возвращается значение true. В качестве параметра лямбда-выражение принимает объект типа T
Consumer<T> выполняет некоторое действие над объектом типа T, при этом ничего не возвращая
Function<T,R> представляет функцию перехода от объекта типа T к объекту типа R
Supplier<T> не принимает никаких аргументов, но должен возвращать объект типа T
UnaryOperator<T> принимает в качестве параметра объект типа T, выполняет над ними операции и возвращает результат операций в виде объекта типа T
BinaryOperator<T> принимает в качестве параметра два объекта типа T, выполняет над ними бинарную операцию и возвращает ее результат также в виде объекта типа T

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое ссылка на метод?

A

Ссылка на метод - это сокращенный синтаксис выражения лямбда, который выполняет только один метод. Это позволяет нам ссылаться на конструкторы или методы, не выполняя их.

Ссылки на методы бывают четырех видов:

Ссылка на статический метод - ContainingClass::staticMethodName

Ссылка на нестатический метод конкретного объекта - containingObject::instanceMethodName

Ссылка на нестатический метод любого объекта конкретного типа
ContainingType::methodName

Ссылка на конструктор ClassName::new

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое лямбда-выражение? Чем его можно заменить?

A

Упрощённая запись анонимного класса, реализующего функциональный интерфейс

Основу лямбда-выражения составляет лямбда-оператор, который представляет стрелку ->. Этот оператор разделяет лямбда-выражение на две части: левая часть содержит список параметров выражения, а правая собственно представляет тело лямбда-выражения, где выполняются все действия.

Лямбда-выражение не выполняется само по себе, а образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.

Представляет набор инструкций, которые можно выделить в отдельную переменную и затем многократно вызвать в различных местах программы. Образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.

список параметров выражения -> тело лямбда-выражения (действия)

Параметры лямбда-выражения должны соответствовать по типу параметрам метода из функционального интерфейса.

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

К каким переменным есть доступ у лямбда-выражений?

A

Доступ к переменным внешней области действия из лямбда-выражения очень схож к доступу из анонимных объектов. Можно ссылаться на:

неизменяемые (effectively final - не обязательно помеченные как final) локальные переменные;
поля класса;
статические переменные.
К методам по умолчанию реализуемого функционального интерфейса обращаться внутри лямбда-выражения запрещено.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly