java8 lambda表達式

lambda表達式

一、什麼是函數式接口?

1、定義

函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。

2、格式

修飾符 interface 接口名稱 {
public abstract 返回值類型 方法名稱(可選參數信息);

// 其他非抽象方法內容

}

3、@FunctionalInterface註解

可用於一個接口的定義上,一旦使用該註解來定義接口,**編譯器將會強制檢查該接口,是否確實有且僅有一個抽象方法,否則將會報錯。**需要注意的是,即使不使用該註解,只要滿足函數式接口的定義,這仍然是一個函數式接口,使用起來都一樣。

4、驗證

(1)沒有抽象方法

報錯:No target method found
image.png

(2)只有一個抽象方法

不報錯
image.png

(3)多於一個抽象方法

報錯提示:
Multiple non-overriding abstract methods found in interface lambda.MyFunctionInterface
image.png

二、接口複習

1、接口特性

  • 接口不能用於實例化對象。
  • 接口沒有構造方法。
  • 接口中所有的方法必須是抽象方法。
  • 接口不能包含成員變量,除了 static 和 final 變量。
  • 接口不是被類繼承了,而是要被類實現。
  • 接口支持多繼承。
  • 接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定爲 public abstract(只能是 public,其他修飾符都會報錯)。
  • 接口中可以含有變量,但是接口中的變量會被隱式的指定爲 public static final 變量(並且只能是 public,用 private\protected\default 修飾會報編譯錯誤)。
  • 接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法。
  • 接口中不能含有靜態代碼塊和普通代碼塊

2、接口驗證

image.png
image.png

三、java8中的函數接口

1、predicate接口

接受一個輸入參數 T,返回一個布爾值結果。
該接口包含多種默認方法來將Predicate組合成其他複雜的邏輯(比如:與,或,非)。
該接口用於測試對象是 true 或 false。
image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章