【发布时间】:2016-04-11 09:58:17
【问题描述】:
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, U, R>告诉JavaT、U和R不应该是实际的类,而是泛型类的占位符。 -
任何将泛型类型参数添加到它们所在类之外的方法都必须在返回类型之前声明它们。静态方法不会从它们所在的类继承任何泛型类型参数,因此它们的所有类型参数都必须在返回类型之前声明。当您看到类型参数与父类相同的静态方法时,它们的名称相同只是巧合。因此,T、U 和 R 只是方法参数和返回类型中使用的所有泛型类型的集合。
-
顺便说一句,api中的类型参数有一个命名约定。通常,但并非总是如此,R 是返回值的类型,而 T 和如果需要的话,U 是参数类型。当返回类型与param类型相同时,比如UnaryOperator和BinaryOperator,就是T
标签: java lambda currying partial-application