Functional interface Flashcards

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

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

A

Интерфейс, имеющий 1 абстрактный метод и аннотацию @FunctionalInterface

Функциональные интерфейсы могут иметь любое количество дефолтных методов.

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

Приведите примеры функциональных интерфейсов.

A
  • Runnable
  • Function
  • Supplier
  • Consumer
  • Predicate

Эти интерфейсы широко используются в функциональном программировании на Java.

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

В чем разница между Consumer и Supplier?

A
  • Consumer принимает и не возвращает
  • Supplier не принимает, но возвращает

Это ключевое различие в их функциональности.

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

Будет ли интерфейс функциональным, если в него добавить метод из класса Object?

A

Будет, так как интерфейс считается функциональным, если он содержит ровно один абстрактный метод.

Методы equals(), hashCode() и toString() не влияют на количество абстрактных методов.

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

Что произойдет, если не поставить аннотацию @FunctionalInterface?

A

Интерфейс все равно может быть функциональным.

Без аннотации компилятор не будет проверять на соответствие требованиям, что может привести к ошибкам.

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

Что такое лямбда-функции?

A

Реализация функционального интерфейса

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

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

Что произойдет, если передать в лямбду не финальную переменную?

A

Компилятор выдаст ошибку.

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

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

Что такое замыкания?

A

Лямбда-выражения, которые захватывают переменные из внешнего контекста и могут использовать их при выполнении.

Эти переменные должны быть эффективно финальными.

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

Как компилятор обрабатывает захваченные переменные при создании лямбды?

A

Компилятор сохраняет не саму переменную, а её значение на момент захвата.

Это обеспечивает корректность работы многозадачности и предотвращает побочные эффекты.

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

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

A

Анонимные классы

Лямбда-выражения делают код более чистым и удобным для чтения.

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