我以前写过有关功能接口及其用法的文章。 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consumer,Predicate和其他接口,它们都是java.util.function软件包的一部分。广泛使用。 这些接口具有一种抽象方法,该方法被定义的lambda表达式覆盖。 在这篇文章中,我将选择Function接口来简要解释它,它是java.util.function包中存在的接口之一。
功能接口有两种方法:
- R apply(T t) –计算将函数应用于输入参数的结果
- 默认‹V›函数‹T,V› –与另一个函数结合,返回执行两个函数的函数。
在这篇文章中,我想写一下apply方法,创建接受这些接口和参数的API,然后调用它们的相应方法。 我们还将研究API的调用者如何传递lambda表达式来代替接口的实现。 除了传递lambda表达式外,API的用户还可以传递方法引用,而我还没有写过方法引用。
函数接口用于需要将一些代码封装到一个方法中的方法,该方法接受某个值作为输入参数,然后在对输入执行所需的操作后返回另一个值。 方法的输入参数类型和返回类型可以相同或不同。
让我们看一下接受Function接口实现的API:
public class FunctionDemo {
//API which accepts an implementation of
//Function interface
static void modifyTheValue(int valueToBeOperated,
Function<Integer, Integer> function){
int newValue = function.apply(valueToBeOperated);
/*
* Do some operations using the new value.
*/
System.out.println(newValue);
}
}
现在让我们看一下调用此API的代码:
public static void main(String[] args) {
int incr = 20;
int myNumber = 10;
modifyTheValue(myNumber, val-> val + incr);
myNumber = 15;
modifyTheValue(myNumber, val-> val * 10);
modifyTheValue(myNumber, val-> val - 100);
modifyTheValue(myNumber, val-> "somestring".length() + val - 100);
}
您可以看到正在创建的lambda表达式接受一个参数并返回一些值。
我将很快更新使用此Function接口作为参数的各种API。 同时,完整的代码是:
public class FunctionDemo {
public static void main(String[] args) {
int incr = 20;
int myNumber = 10;
modifyTheValue(myNumber, val-> val + incr);
myNumber = 15;
modifyTheValue(myNumber, val-> val * 10);
modifyTheValue(myNumber, val-> val - 100);
modifyTheValue(myNumber, val-> "somestring".length() + val - 100);
}
//API which accepts an implementation of
//Function interface
static void modifyTheValue(int valueToBeOperated,
Function<Integer, Integer> function){
int newValue = function.apply(valueToBeOperated);
/*
* Do some operations using the new value.
*/
System.out.println(newValue);
}
}
输出为:
30
150
-85
-75
注意:上面的代码是使用从此处下载的JDK和Netbeans 8 nightly builds编译的 。