Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: Java, FunctionalInterface, lambda expressions, functional programming, SAM interface

Зачем нужна аннотация @FunctionalInterface?

Вопрос проверяет понимание назначения аннотации @FunctionalInterface в Java, которая маркирует интерфейсы, предназначенные для использования в лямбда-выражениях.

Короткий ответ

Аннотация @FunctionalInterface указывает, что интерфейс является функциональным, то есть содержит ровно один абстрактный метод. Это позволяет компилятору Java проверять корректность интерфейса и использовать его для лямбда-выражений. Без неё интерфейс всё равно может быть функциональным, но аннотация добавляет ясность и предотвращает случайное добавление лишних методов.

Длинный ответ

В Java 8 была введена концепция функциональных интерфейсов для поддержки лямбда-выражений и функционального программирования. Функциональный интерфейс — это интерфейс, который содержит ровно один абстрактный метод (так называемый SAM — Single Abstract Method). Аннотация @FunctionalInterface используется для явного обозначения таких интерфейсов.

Основная цель аннотации

Главная цель — документация и проверка на уровне компилятора. Когда вы помечаете интерфейс этой аннотацией, компилятор проверяет, действительно ли он содержит только один абстрактный метод. Если вы попытаетесь добавить второй абстрактный метод, компиляция завершится с ошибкой, что предотвращает случайные изменения, которые сломали бы существующие лямбда-выражения.

Пример использования

Рассмотрим простой функциональный интерфейс для операции сложения:

@FunctionalInterface
interface Adder {
    int add(int a, int b);
    // Допустимы default или static методы
    default void printResult(int result) {
        System.out.println("Result: " + result);
    }
}

public class Main {
    public static void main(String[] args) {
        // Использование с лямбда-выражением
        Adder adder = (x, y) -> x + y;
        System.out.println(adder.add(5, 3)); // Вывод: 8
    }
}

Где применяется

Функциональные интерфейсы широко используются в Stream API, многопоточности (например, Runnable, Callable) и различных библиотеках, где требуется передача поведения в виде лямбда-выражений. Стандартная библиотека Java включает множество предопределённых функциональных интерфейсов в пакете java.util.function (например, Function, Predicate, Consumer).

Вывод: Аннотацию @FunctionalInterface стоит применять, когда вы создаёте интерфейс, предназначенный специально для лямбда-выражений, чтобы обеспечить безопасность типов и явно выразить намерение в коде.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Java

    Java

Ключевые слова

#Java

#FunctionalInterface

#lambda expressions

#functional programming

#SAM interface

Подпишись на Java Developer в телеграм