當前位置:
首頁 > 知識 > Java 8 函數式介面掃雷指南

Java 8 函數式介面掃雷指南

Java 8 函數式介面掃雷指南

java 8 Functionaml Interfaces

在前文中我們複習了Lambdas表達式和一些基本的函數式介面。在本文中將重點討論一下函數式介面,重點討論以一下兩點:

  1. 什麼是函數式介面?

  2. 函數式介面使用時方方面面


什麼是函數式介面?

函數式介面(Functional Interface)是Java 8對一類特殊類型的介面的稱呼。這類介面有且只有一個抽象方法的介面(除了隱含的Object對象的公共方法),因此最開始也就做SAM類型的介面(Single Abstract Method)。

為什麼會單單從介面中定義出此類介面呢?原因是在Java Lambda的實現中,開發組不想再為Lambda表達式單獨定義一種特殊的Structural函數類型,稱之為箭頭類型(arrow type),依然想採用Java既有的類型系統(class, interface, method等),原因是增加一個結構化的函數類型會增加函數類型的複雜性,破壞既有的Java類型,並對成千上萬的Java類庫造成嚴重的影響。權衡利弊,因此最終還是利用SAM介面作為Lambda表達式的目標類型。

函數式介面代表的一種契約,一種對某個特定函數類型的契約。在它出現的地方,實際期望一個符合契約要求的函數。Lambda表達式不能脫離上下文而存在,它必須要有一個明確的目標類型,而這個目標類型就是某個函數式介面。

Java 8 新增了一個註解@FunctionalInterface表示SAM介面。如果一個介面符合"函數式介面"定義,那麼加不加該註解都沒有影響。加上該註解能夠更好地讓編譯器進行檢查。如果編寫的不是函數式介面,但是加上了@FunctionInterface,那麼編譯器會報錯。另外函數式編程中記著要純哦!加個這個註解先把函數式的標籤給貼上吧。

只說不練的教程都是耍流氓!

先定義一個FunctionInterface:

Java 8 函數式介面掃雷指南

Function interface

函數式介面使用時方方面面

東: 有且只有一個抽象方法


SAM介面不一定是FunctionalInterface,但FunctionalInterface一定是SAM介面。

南: @FunctionalInterface 註解可省略

Java 8 函數式介面掃雷指南


東南解釋:加上註解,如果出現兩個以上抽象方法時,就會報錯~

西: default 方法是完全支持的

北: 對java.lang.Object方法的@Override不算是抽象方法

Java 8 函數式介面掃雷指南

Java 8 函數式介面掃雷指南



Happy Work!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 教授學苑 的精彩文章:

Google Guava 筆記(一)-Collections
Google Guava 筆記(二)-深入探索
JavaScript中this常見的兩個坑
JavaScript 代碼規範,自帶 linter & 代碼自動修正
JavaScript 之Array 你真的了解嗎?

TAG:教授學苑 |

您可能感興趣

2018年4月輕改動畫掃雷前瞻——《刀劍神域外傳 Gun Gale Online》
破解Windows掃雷遊戲
Roguelike掃雷《穿越雷區》、在線FPS《危機臨近》
P2P掃雷指南請收好
自動掃雷 python
《Overlord》第三季掃雷,破軍的魔王與魔導國
篝火掃雷團:新、奇、特的 Roguelike 卡牌遊戲《指環之城》
iPhoneX上跑WIN95什麼感覺 玩掃雷和紅警一點都不卡
篝火掃雷團:王道挖礦搜寶 Roguelike《礦坑之下》前瞻
KSrelief發起全面掃雷計劃,為葉門人民創造「無地雷生活環境」
起售價7.6萬元的蘋果Mac Pro玩掃雷卡不卡?
篝火掃雷團:走進北歐探尋黑暗的秘密《屍靈(Draugen)》前瞻
「蟹」爾曼了解一下!1/72 M4A4 CRAB蟹式掃雷坦克–模型作品
iPad加掃雷就像玩AR遊戲
重溫《空當接龍》、《掃雷》!國外大神把 Windows 95 做成了 App,帶你回到童年
雷場剋星-日本92式掃雷車
俄羅斯 烏蘭-6 掃雷機器人簡介(上)
俄羅斯 烏蘭-6 掃雷機器人簡介(中)
俄羅斯 烏蘭-6 掃雷機器人簡介(下)
瑞典CV90戰車掃雷版