Функциональный интерфейс – это разновидность интерфейса, в котором определена функция обратного вызова (callback). В функциональном интерфейсе может быть всего один абстрактный метод, в нём может находиться неограниченное число методов default, а также переобъявленные методы, наследуемые от Object.
Функциональный метод может иметь неограниченное количество аргументов. На тип возвращаемого значения также и список возможных исключений (как проверяемых, checked, так и непроверяемых, unchecked) не накладывается никаких ограничений.
Функциональный интерфейс рекомендуется помечать с помощью аннотации @FunctionalInterface. Это говорит компиляторы о необходимости выполнить дополнительную проверку. Если поставить данную аннотацию на нефункциональном типе во время компиляции появиться сообщение об ошибке.
Примеры FunctionalInterface: Callable, Supplier, Comparable:
@FunctionalInterface
interface IAmFunctional {
String toString();
void callback();
default void extraAction() {};
}
@Functionallnterface
abstract class NonFunctional {
abstract void callback();
}