首页 > 代码库 > Java8 Lambda - Functioanl Interface 函数式接口

Java8 Lambda - Functioanl Interface 函数式接口

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

本文出自 “Development” 博客,请务必保留此出处http://jamesdev.blog.51cto.com/2066624/1858763

Java8 Lambda - Functioanl Interface 函数式接口