В Java 8 новый пакет java.util.function содержит множество функциональных интерфейсов. Документация для этого пакета (http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html) делает несколько ссылок на «функциональные формах»:Что такое «функциональная форма» в отношении функциональных интерфейсов в Java 8?
- Есть несколько основных функции формирует, в то числе функции (одноместный функции от Т до R), Потребителя (одноместный функции от Т до void), Predicate (унарная функция от T до boolean) и поставщик (функция nilary для R).
- Функциональные формы имеют естественную сущность, основанную на том, как они наиболее часто используются. Базовые фигуры могут быть изменены префиксом arity, чтобы указать другую значимость, такую как BiFunction (двоичная функция от T и от U до R).
- Есть дополнительная функция получена формирует, которые проходят основной функции формирует, в том числе UnaryOperator (расширяет функции) и BinaryOperator (распространяется BiFunction).
Я никогда не слышал о термине «форма функции» раньше, и я едва могу найти ссылку на него в любом месте, кроме как в приведенной выше документации, но поскольку это официальная документация Oracle по функциональным интерфейсам, я бы хотел понимать это.
Может ли кто-нибудь дать определение «формы функции» и придумать пример? Это общий термин в области компьютерных наук, или он относится только к Java 8? И как форма функции связана с дескриптором функции (например, (T) -> boolean для предиката T >)?
ОБНОВЛЕНИЕ Два комментария ниже от Брайана Гетца отвечают на вопросы, поднятые мной в этом сообщении.
Единственной (неофициальная) ссылка на форму в JLS находится в нижней части [15.12.2.1] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2.1). – assylias
«форма» также упоминается в [JSR 335] (https://jcp.org/aboutJava/communityprocess/final/jsr335/index.html), часть F; но он всегда помещается в кавычки, и для него нет явного определения. – stakx
Ссылки в JLS и JSR335 на «shape» находятся в одинаковых предложениях, и ссылка, по-видимому, копируется из одного документа в другой. Из контекста кажется, что «форма функции» как-то связана с оценкой времени выполнения (тогда как «дескриптор функции», очевидно, известен при компиляции). – skomisa