什么是Java 8中功能接口的"功能形状"?

sko*_*isa 5 lambda java-8 functional-interface

在Java 8中,新包java.util.function包含许多功能接口.该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)对"函数形状"进行了多次引用:

  • 有几个基本的函数形状,包括Function(从T到R的一元函数),Consumer(从T到void的一元函数),Predicate(从T到boolean的一元函数)和Supplier(nilary函数到R).
  • 功能形状基于它们最常用的方式具有自然的特征.可以通过arity前缀修改基本形状以指示不同的arity,例如BiFunction(从T和U到R的二进制函数).
  • 还有其他派生函数形状,它们扩展了基本函数形状,包括UnaryOperator(扩展函数)和BinaryOperator(扩展BiFunction).

我之前从未听说过"函数形状"这个术语,除了上面的文档之外,我几乎找不到它的引用,但由于这是Oracle关于函数接口的正式文档,我想了解它.

任何人都可以提供"功能形状"的定义,并发明一个例子吗?它是计算机科学中的通用术语,还是仅与Java 8相关?函数形状如何与函数描述符相关(如(T) - > Predicate <T>接口的布尔值)?

更新 Brian Goetz的以下两条评论回答了我在这篇文章中提出的问题.

Chr*_*ung 3

函数形状基本上就是其输入和输出的样子,就类型参数而言:

  • 一元函数接受一个输入并返回一个输出 [T→R]
  • 二元函数接受两个输入并返回一个输出 [(T,U)→R]
  • 三元函数接受三个输入并返回一个输出 [(T,U,V)→R]
  • 供应商(也称为零函数)不接受输入并返回一个输出 [()→R]
  • 消费者接受一个输入并且不返回任何输出 [T→()]
  • 一元谓词接受一个输入并返回一个布尔类型的输出 [T→bool]
  • 二元谓词接受两个输入并返回一个布尔类型的输出 [(T,U)→bool]
  • 一元运算符接受一个输入并返回一个相同类型的输出 [T→T]
  • 二元运算符接受两个相同类型的输入并返回一个相同类型的输出 [(T,T)→T]

还有很多其他形状,但这些都是常见的。

  • @skomi 确实如此,也许将类型纳入讨论会更好。特别是因为,存在一般的一元函数(`T -&gt; U`)、谓词(`T -&gt; bool`)和运算符(`T -&gt; T`),每个函数都有不同的感觉。让我修改我的帖子。 (2认同)