在Java 8中,新包 java.util.function 包含许多功能接口。该软件包的文档(http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)对"函数形状进行了多次引用":
我从未听说过术语"功能形状"以前,除了上面的文档之外,我几乎找不到对它的引用,但由于这是Oracle关于功能接口的正式文档,我想了解它。
任何人都可以提供"函数形状"的定义,并发明一个例子吗?它是计算机科学中的通用术语,还是仅与Java 8相关?函数形状如何与函数描述符相关(例如,谓词< T>接口的(T) - > boolean )?
更新 Brian Goetz的以下两条评论回答了我在这篇文章中提出的问题。
答案 0 :(得分:2)
根据类型参数,函数形状基本上是其输入和输出的样子:
还有许多其他形状,但这些形状很常见。
答案 1 :(得分:2)
我没有找到任何关于术语和功能形状的官方或广泛接受的定义的参考,所以接下来是我自己的解释。
A"功能形状"似乎是"type signature" including the return type,即:&/ p>的总和描述
(也就是说,除了函数名,参数名和正文之外,基本上都是关于函数的所有内容。)我怀疑他们没有使用术语"签名"因为它在Java中已经有了不同的含义 - 它不包含返回类型。所以他们发明了一个新名词。
在函数式编程语言中,"类型签名"通常包括返回类型。签名有助于理解函数可能执行的操作,因此通常会明确写下它们。例如,新BiFunction
的签名(或#34;函数形状"在Java的术语中)可能会被写为(T, U) -> R
,其中第一部分是元组表示参数列表,第二部分是返回类型。
因此我不同意this other answer:我认为类型很重要并且不已经放弃。如果它们已经放弃,那么在新命名空间中定义的几种类型将具有完全相同的函数形状(例如(答案已被编辑过。)Supplier
,Predicate
,Function
)。如果是这样,那么为什么文档会选择用函数形状的不匹配概念来解释这些新类型呢?这没有用。
以下是新Java功能接口的功能类型签名的几个示例:
BiFunction<T,U,R>, (T, U) -> R
BinaryOperator<T,U,R> (T, U) -> R
BiPredicate<T,U> (T, U) -> boolean
Consumer<T> T -> () note: `()` means `void`
Function<T,R> T -> R
IntFunction<R> int -> R
Predicate<T> T -> boolean
Supplier<R> () -> R
UnaryOperator<T,R> T -> R