Почему функциональные интерфейсы в Java 8 имеют один абстрактный метод?

Как известно в Java 8, вводится понятие функциональных интерфейсов. Функциональный интерфейс имеет один метод abstract, и возможны несколько стандартных или статических методов.

Но почему функциональный интерфейс должен иметь только один абстрактный метод? Если интерфейс имеет более чем один абстрактный метод, почему это не функциональный интерфейс?

Ответ 1

Функциональный интерфейс, также известный как Single Abstract Method Interface, был введен для облегчения функций лямбда. Поскольку лямбда-функция может обеспечить реализацию только для одного метода, для функционального интерфейса обязательно иметь ТОЛЬКО один абстрактный метод. Для более подробной информации см. Здесь.

Изменить → Также стоит отметить, что функциональный интерфейс может иметь реализацию по умолчанию в интерфейсе. Вы найдете более подробную информацию о реализации по ссылке выше.

Ответ 2

Функциональный интерфейс позволяет нам вызвать объект так, как если бы он был функцией, которая позволяет нам передавать глаголы (функции) вокруг нашей программы, а не существительные (объекты). Реализации функционального интерфейса выполняют одно четко определенное действие, как и любой метод, с таким именем, как запуск, выполнение, выполнение, применение или какой-либо другой общий глагол. [1]

  • Шаблоны функционального программирования в Scala и Clojure.

Ответ 3

Написание выражения Lamba означает, что мы реализуем интерфейс, являющийся функциональным интерфейсом. Он должен иметь один абстрактный метод, потому что во время выражения лямбда мы можем предоставить только одну реализацию сразу. Поэтому в фрагменте кода, опубликованном в следующем вопросе, мы в любой момент даем только одну реализацию, объявляя Lambda, где нам нужно реализовать два абстрактных метода.

Почему не несколько абстрактных методов в функциональном интерфейсе в Java8?