函數(shù)式接口(Functional Interface)就是一個有且僅有一個抽象方法辑舷,但是可以有多個非抽象方法的接口袱蚓。
(1)加不加 @FunctionalInterface 對于接口是不是函數(shù)式接口沒有影響遍尺,該注解只是提醒編譯器去檢查該接口是否僅包含一個抽象方法
(2)函數(shù)式接口里是可以包含默認方法饭弓,因為默認方法不是抽象方法橱野,其有一個默認實現(xiàn)灶搜,所以是符合函數(shù)式接口的定義的邀桑;
(3)函數(shù)式接口里是可以包含靜態(tài)方法瞎疼,因為靜態(tài)方法不能是抽象方法,是一個已經(jīng)實現(xiàn)了的方法壁畸,所以是符合函數(shù)式接口的定義的贼急;
(4)函數(shù)式接口里是可以包含Object里的public方法茅茂,這些方法對于函數(shù)式接口來說,不被當(dāng)成是抽象方法(雖然它們是抽象方法)太抓;因為任何一個函數(shù)式接口的實現(xiàn)空闲,默認都繼承了 Object 類,包含了來自 java.lang.Object 里對這些抽象方法的實現(xiàn)走敌;
基本接口
接口 | 描述 |
---|---|
Consumer<T> | 代表了接受一個輸入?yún)?shù)并且無返回的操作 |
Supplier<T> | 無參數(shù)碴倾,返回一個結(jié)果 |
Function<T,R> | 接受一個輸入?yún)?shù),返回一個結(jié)果掉丽。 |
Predicate<T> | 接受一個輸入?yún)?shù)跌榔,返回一個布爾值結(jié)果。 |
第一次變種
接口 | 描述 |
---|---|
BiConsumer<T,U> | 代表了一個接受兩個輸入?yún)?shù)的操作机打,并且不返回任何結(jié)果 |
BiFunction<T,U,R> | 代表了一個接受兩個輸入?yún)?shù)的方法矫户,并且返回一個結(jié)果 |
BiPredicate<T,U> | 代表了一個兩個參數(shù)返回一個boolean值的方法 |
第二次變種
接口 | 描述 |
---|---|
UnaryOperator<T> | 接受一個參數(shù)為類型T,返回值類型也為T。 |
BinaryOperator<T> | 代表了一個作用于于兩個同類型操作符的操作残邀,并且返回了操作符同類型的結(jié)果 |
第三次變種
接口 | 描述 |
---|---|
IntConsumer | 接受一個int類型的輸入?yún)?shù),無返回值柑蛇。 |
IntSupplier | 無參數(shù)芥挣,返回一個int類型結(jié)果。 |
IntFunction<R> | 接受一個int類型輸入?yún)?shù)耻台,返回一個結(jié)果空免。 |
IntPredicate | 接受一個int輸入?yún)?shù),返回一個布爾值的結(jié)果盆耽。 |
IntUnaryOperator | 接受一個參數(shù)同為類型int,返回值類型也為int 蹋砚。 |
IntBinaryOperator | 接受兩個參數(shù)同為類型int,返回值類型也為int 。 |
第四次變種
接口 | 描述 |
---|---|
DoubleConsumer | 代表一個接受double值參數(shù)的操作摄杂,并且不返回結(jié)果坝咐。 |
DoubleSupplier | 代表一個double值結(jié)構(gòu)的提供方 |
DoubleFunction<R> | 代表接受一個double值參數(shù)的方法,并且返回結(jié)果 |
DoublePredicate | 代表一個擁有double值參數(shù)的boolean值方法 |
DoubleBinaryOperator | 代表了作用于兩個double值操作符的操作析恢,并且返回了一個double值的結(jié)果墨坚。 |
DoubleUnaryOperator | 接受一個參數(shù)同為類型double,返回值類型也為double。 |