Java8 Lambda - Functioanl Interface 函数式接口

在java 8 里面新增了functional interface 这个概念。而且添加了新的annotation @FunctionalInterfaceI 
java


1 什么是functional interface 函数式接口了?app

functional interface : functional interface only have 1 abstract method。 这就是函数接口的定义。简单明白,函数接口其实就是一个抽象方法的接口(interface). ide


2 函数式接口的类型函数

这里我只介绍基本的几个类型Predicate<T>,Consumer<T>,Function<T, R>,Supplier<T>对象

这些函数式声明在java.util.function这个包里面, 你们能够本身去看一下代码。接口


1 Predicate<T>——接收T(generics)泛型对象并返回booleanit

boolean test (T t);io

经常使用于判断, 例如stream.filter(Predicate<T>)function


2 Consumer<T>——接收Tgenerics)泛型对象,不返回值 class

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)。

相关文章
相关标签/搜索