日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java8】@FunctionalInterface

發布時間:2025/3/20 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java8】@FunctionalInterface 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

  • 什么是函數式接口(Functional Interface)
  • 函數式接口用途
  • 關于@FunctionalInterface注解
  • 函數式接口里允許定義默認方法
  • 函數式接口里允許定義靜態方法
  • 函數式接口里允許定義java.lang.Object里的public方法
  • JDK中的函數式接口舉例
  • 參考資料

什么是函數式接口(Functional Interface)

其實之前在講Lambda表達式的時候提到過,所謂的函數式接口,當然首先是一個接口,然后就是在這個接口里面只能有一個抽象方法

這種類型的接口也稱為SAM接口,即Single Abstract Method interfaces。

函數式接口用途

它們主要用在Lambda表達式和方法引用(實際上也可認為是Lambda表達式)上。

如定義了一個函數式接口如下:

@FunctionalInterfaceinterface GreetingService {void sayMessage(String message);}

那么就可以使用Lambda表達式來表示該接口的一個實現(注:JAVA 8 之前一般是用匿名類實現的):

GreetingService greetService1 = message -> System.out.println("Hello " + message);

關于@FunctionalInterface注解

Java 8為函數式接口引入了一個新注解@FunctionalInterface,主要用于編譯級錯誤檢查,加上該注解,當你寫的接口不符合函數式接口定義的時候,編譯器會報錯。

正確例子,沒有報錯

@FunctionalInterfaceinterface GreetingService{void sayMessage(String message);}

錯誤例子,接口中包含了兩個抽象方法,違反了函數式接口的定義,Eclipse報錯提示其不是函數式接口。

提醒:加不加@FunctionalInterface對于接口是不是函數式接口沒有影響,該注解知識提醒編譯器去檢查該接口是否僅包含一個抽象方法

函數式接口里允許定義默認方法

函數式接口里是可以包含默認方法,因為默認方法不是抽象方法,其有一個默認實現,所以是符合函數式接口的定義的;

如下代碼不會報錯:

@FunctionalInterfaceinterface GreetingService{void sayMessage(String message);default void doSomeMoreWork1(){// Method body}default void doSomeMoreWork2(){// Method body}}

函數式接口里允許定義靜態方法

函數式接口里是可以包含靜態方法,因為靜態方法不能是抽象方法,是一個已經實現了的方法,所以是符合函數式接口的定義的;

如下代碼不會報錯:

@FunctionalInterfaceinterface GreetingService {void sayMessage(String message);static void printHello(){System.out.println("Hello");}}

函數式接口里允許定義java.lang.Object里的public方法

函數式接口里是可以包含Object里的public方法,這些方法對于函數式接口來說,不被當成是抽象方法(雖然它們是抽象方法);因為任何一個函數式接口的實現,默認都繼承了Object類,包含了來自java.lang.Object里對這些抽象方法的實現;

如下代碼不會報錯:

@FunctionalInterfaceinterface GreetingService {void sayMessage(String message);@Overrideboolean equals(Object obj);}

JDK中的函數式接口舉例

java.lang.Runnable,

java.awt.event.ActionListener,?

java.util.Comparator,

java.util.concurrent.Callable

java.util.function包下的接口,如Consumer、Predicate、Supplier等

轉載于:https://www.cnblogs.com/itplay/p/10721904.html

總結

以上是生活随笔為你收集整理的【Java8】@FunctionalInterface的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。