在java 8 里面新增了functional interface 这个概念。并且添加了新的annotation @FunctionalInterfaceI
1 什么是functional interface 函数式接口了?
functional interface : functional interface only have 1 abstract method。 这就是函数接口的定义。简单明白,函数接口其实就是一个抽象方法的接口(interface).
2 函数式接口的类型
这里我只介绍基本的几个类型Predicate<T>,Consumer<T>,Function<T, R>,Supplier<T>
这些函数式声明在java.util.function这个包里面, 大家可以自己去看一下代码。
1 Predicate<T>——接收T(generics)泛型对象并返回boolean
boolean test (T t);
常用于判断, 例如stream.filter(Predicate<T>)
2 Consumer<T>——接收Tgenerics)泛型对象,不返回值
void accept(T t)
用于作为consumer 例如forEach(Consumer<T>)
3 Function<T, R>——接收Tgenerics)泛型对象,返回R(generics)泛型对象
T -> R
R apply(T t)
例子 stream.map(Function<T, R>)
4 Supplier<T>——提供Tgenerics)泛型对象(例如工厂),不接收值
() -> T
3. 细节注意
函数式接口里面不是只允许一个方法, 因为java 8 新添加了默认方法。所以函数式接口也是可以有多个*(default method)默认方法。但是函数式接口只能有一个抽象方法(abstract method)。