Functional interface Flashcards
Что такое функциональные интерфейсы?
Интерфейс, имеющий 1 абстрактный метод и аннотацию @FunctionalInterface
Функциональные интерфейсы могут иметь любое количество дефолтных методов.
Приведите примеры функциональных интерфейсов.
- Runnable
- Function
- Supplier
- Consumer
- Predicate
Эти интерфейсы широко используются в функциональном программировании на Java.
В чем разница между Consumer и Supplier?
- Consumer принимает и не возвращает
- Supplier не принимает, но возвращает
Это ключевое различие в их функциональности.
Каковы преимущества лямбда-выражений?
- Более компактный код
- Упрощают работу с коллекциями
- Заменяют анонимные классы
- Позволяют писать функциональный код
Лямбда-выражения делают код более читаемым и лаконичным.
Будет ли интерфейс функциональным, если в него добавить метод из класса Object?
Будет, так как интерфейс считается функциональным, если он содержит ровно один абстрактный метод.
Методы equals(), hashCode() и toString() не влияют на количество абстрактных методов.
Что произойдет, если не поставить аннотацию @FunctionalInterface?
Интерфейс все равно может быть функциональным.
Без аннотации компилятор не будет проверять на соответствие требованиям, что может привести к ошибкам.
Что такое лямбда-функции?
Реализация функционального интерфейса
Лямбда-функции позволяют создавать анонимные реализации интерфейсов с одним абстрактным методом.
Что произойдет, если передать в лямбду не финальную переменную?
Компилятор выдаст ошибку.
Переменная должна быть эффективно финальной, то есть её значение не должно изменяться после первого присваивания.
Что такое замыкания?
Лямбда-выражения, которые захватывают переменные из внешнего контекста и могут использовать их при выполнении.
Эти переменные должны быть эффективно финальными.
Как компилятор обрабатывает захваченные переменные при создании лямбды?
Компилятор сохраняет не саму переменную, а её значение на момент захвата.
Это обеспечивает корректность работы многозадачности и предотвращает побочные эффекты.
Что заменяют лямбда-выражения?
Анонимные классы
Лямбда-выражения делают код более чистым и удобным для чтения.