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