РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
112 of 1163 menu

Аннотация FunctionalInterface

Аннотация FunctionalInterface помечает интерфейс как функциональный. Функциональный интерфейс - это интерфейс, который содержит ровно один абстрактный метод. Такие интерфейсы можно реализовывать с помощью лямбда-выражений и ссылок на методы. Аннотация необязательна, но она позволяет компилятору проверить, что интерфейс действительно содержит только один абстрактный метод, и выдать ошибку в противном случае. Параметров у аннотации нет.

Синтаксис

@FunctionalInterface public interface InterfaceName { returnType methodName(parameters); }

Пример

Объявим функциональный интерфейс с одним абстрактным методом и реализуем его через лямбда-выражение:

@FunctionalInterface interface Operation { int apply(int a, int b); } public class Main { public static void main(String[] args) { Operation sum = (a, b) -> a + b; Operation mult = (a, b) -> a * b; System.out.println(sum.apply(2, 3)); System.out.println(mult.apply(2, 3)); } }

Результат выполнения кода:

5 6

Пример

Если в интерфейсе объявить два абстрактных метода, компилятор выдаст ошибку. Давайте убедимся в этом:

@FunctionalInterface interface Operation { int apply(int a, int b); int apply2(int a, int b); }

Результат компиляции:

error: Unexpected @FunctionalInterface annotation Operation is not a functional interface multiple non-overriding abstract methods found in interface Operation

Также функциональный интерфейс может содержать методы default и static - они не считаются абстрактными и не мешают аннотации. Давайте проверим:

@FunctionalInterface interface Operation { int apply(int a, int b); default int applyZero(int a) { return apply(a, 0); } static int applyOne(int a) { return a; } } public class Main { public static void main(String[] args) { Operation sum = (a, b) -> a + b; System.out.println(sum.apply(2, 3)); System.out.println(sum.applyZero(2)); System.out.println(Operation.applyOne(2)); } }

Результат выполнения кода:

5 2 2

Смотрите также

  • аннотация Annotation,
    которая является базовой для всех аннотаций
  • аннотация Target,
    которая задает область применения аннотации
  • аннотация Retention,
    которая определяет время жизни аннотации
  • аннотация Override,
    которая проверяет переопределение метода
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить