Java8新特性02 函数式接口
一. 什么是函数式接口
函数式接口也叫功能性接口,也叫SAM接口,即Single Abstract Method interfaces,是只包含一个方法的接口(指抽象方法)。比如java标准库中的java.lang.Runnable,java.util.concurrent.Callable。
二.如何标识
在java8中通过@FunctionalInterface注解,将一个接口标注为函数式接口,该接口只能包含一个方法(抽象方法);
@FunctionalInterface注解不是必须的,只要接口只包含一个方法,jvm也会自动判断该接口为函数式接口;
一般建议在接口上使用这个注解进行声明,以免他人错误地往接口中添加新方法,如果在接口中定义了第二个抽象方法的话,编译器就会报错。
三. 特点
只有一个抽象方法
可以有多个默认方法和静态方法; eg:java.util.Comparator
函数式接口里允许定义java.lang.Object里的public方法(非final方法),比如上面的java.util.Comparator中的equal方法就是。
四. 为何引入函数式接口
主要是为lambda设计的,lambda表达式的方法体其实就是函数式接口的实现