lambda表達式
一、什麼是函數式接口?
1、定義
函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。
2、格式
修飾符 interface 接口名稱 {
public abstract 返回值類型 方法名稱(可選參數信息);
// 其他非抽象方法內容
}
3、@FunctionalInterface註解
可用於一個接口的定義上,一旦使用該註解來定義接口,**編譯器將會強制檢查該接口,是否確實有且僅有一個抽象方法,否則將會報錯。**需要注意的是,即使不使用該註解,只要滿足函數式接口的定義,這仍然是一個函數式接口,使用起來都一樣。
4、驗證
(1)沒有抽象方法
(2)只有一個抽象方法
(3)多於一個抽象方法
報錯提示:
Multiple non-overriding abstract methods found in interface lambda.MyFunctionInterface
二、接口複習
1、接口特性
- 接口不能用於實例化對象。
- 接口沒有構造方法。
- 接口中所有的方法必須是抽象方法。
- 接口不能包含成員變量,除了 static 和 final 變量。
- 接口不是被類繼承了,而是要被類實現。
- 接口支持多繼承。
- 接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定爲 public abstract(只能是 public,其他修飾符都會報錯)。
- 接口中可以含有變量,但是接口中的變量會被隱式的指定爲 public static final 變量(並且只能是 public,用 private\protected\default 修飾會報編譯錯誤)。
- 接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法。
- 接口中不能含有靜態代碼塊和普通代碼塊
2、接口驗證
三、java8中的函數接口
1、predicate接口
接受一個輸入參數 T,返回一個布爾值結果。
該接口包含多種默認方法來將Predicate組合成其他複雜的邏輯(比如:與,或,非)。
該接口用於測試對象是 true 或 false。