public static <T, U, R> Function<U, R> partial(BiFunction<T, U, R> f, T x) {
return (y) -> f.apply(x, y);
}
在上面的表达式中,我可以理解函数partial 返回另一个函数,Function<U, R>
.那Function<U, R>
本身返回 R 的值。其余的是什么 static <T, U, R>
代表?我的意思是如果 Function<U, R>
返回一个 R 与 <T, U, R>
有什么关系? ?
最佳答案
(我知道这在 Java 术语中在技术上是不正确的,但我将在下面说“参数”,我指的是“形式参数”,因为到处混合使用“形式参数”和“类型参数”会造成混淆。 )
T
是 x
的类型参数争论。
partial
接受两个参数:
f
, 一个接受T
的函数和一个U
并返回R
:
BiFunction<T, U, R> f
x
, 类型为T
:
T x
partial
返回一个只接受 U
的新函数(不是 T
和 U
)并返回 R
.而不是期待 T
参数,新函数使用 x
提供给partial
打电话时 f
.
简而言之:它返回一个新函数,其中第一个参数(类型为 T
)已通过 partial
被部分应用(柯里化(Currying))。的 x
争论。
我们拥有 <T, U, R>
的原因在声明的开头附近是 Java 语法让我们指定 partial
的方式。是一个泛型方法,使用类型参数T
, U
, 和 R
(否则,它们看起来像是键入名称,而不是键入参数)。
关于Java 8 部分函数应用/柯里化(Currying),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545436/