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表达式的方法体其实就是函数式接口的实现

 

posted @ 2018-09-17 14:21  Hermioner  阅读(156)  评论(0编辑  收藏  举报