1、什么是函数式接口
所谓的函数式接口(Functional Interface)是当前的接口中只能包含一个待实现的抽象方法;说到函数式接口就要说到一个注解 @FunctionalInterface,该注解是一个空的注解,主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。接下来举几个例子:
由上述可知,接口中有多于一个或者没有待实现的抽象方法则不符合函数式接口的定义,当加上@FunctionalInterface注解以后就会有不合乎格式的提示。如果需要在函数式接口中提供其他的方法,jdk1.8以后可以使用default方法的形式来提供。
2、使用Lambda表达式来实现函数式接口
提供函数式接口如下:
@FunctionalInterface
public interface LambdaEx1 {
Integer calculate(Integer a,Integer b);
}
接口的使用如下:
// 在jdk1.8之前使用匿名内部类
public static void main(String[] args) {
LambdaEx1 lambdaEx=new LambdaEx1() {
@Override
public Integer calculate(Integer a, Integer b) {
return Math.addExact(a, b);
}
};
System.out.println(lambdaEx.calculate(10, 20));
}
// 在jdk1.8之后使用lambda表达式
public static void main(String[] args) {
LambdaEx1 lambdaEx1=(val1,val2)->{
return Math.addExact(val1, val2);
};
System.out.println(lambdaEx1.calculate(10,20));
}
注意:
只有函数式的接口的可以使用lambda表达式,其他的接口或者方法不能用。在日常的开发过程中有很多函数式接口使用lambda表达式的例子,如:map接口中**forEach()**方法的实现;多线程中run方法的实现等。