函数式接口的定义: 只有一个抽象方法的接口。
- 接口
- 只有一个抽象方法并不表示只有一个方法,java8中支持在接口中实现方法(默认方法),此类方法不是抽象方法,所以不计算在内
用途:个人理解这个功能是伴随 lambda 表达式同时诞生,在lambda表达式中可以很方便的使用函数式接口。通过一段代码说明:
package com.ape.java8.lambda;
public class FunctionalInterface {
public static void main(String[] args) {
Double[] datas = {1.0, 2.0, 3.0, 4.0};
FunctionalInterface test = new FunctionalInterface();
//加法
double addRes = test.calculate(datas, params -> {
double i = 0.0;
for (Double param : params) {
i += param;
}
return i;
});
//乘法
double multiplyRes = test.calculate(datas, params -> {
double i = 1.0;
for (Double param : params) {
i *= param;
}
return i;
});
System.out.println("加法: " + addRes);
System.out.println("乘法: " + multiplyRes);
}
//当参数为函数式接口时,由于只有一个抽象方法,便可以在调用时采用lambda实现此方法
public double calculate(Double[] datas, Calculator calculator) {
return calculator.execute(datas);
}
}
@java.lang.FunctionalInterface
interface Calculator {
Double execute(Double... params);
}
通过代码可以看出,通过函数式接口可以让代码有很大的灵活性,在使用时再定义具体的实现。
以上代码即如果为:
加法: 10.0
乘法: 24.0