摘要:語言是強(qiáng)類型面向?qū)ο蟮恼Z言,所以必須提供一種數(shù)據(jù)類型作為表達(dá)式的返回值類型符合中函數(shù)格式的定義符合面向?qū)ο笠?guī)則,所以最終表達(dá)式要有一個(gè)映射成對象的過程。定一個(gè)函數(shù)式接口我們在接口里定義了一個(gè)沒有參數(shù)返回值的抽象方法。
在JAVA中,“Lambda 表達(dá)式”(Lambda expression)是一個(gè)抽象方法的實(shí)現(xiàn)。這個(gè)抽象方法必須是在接口中聲明的,而且實(shí)現(xiàn)類只需要實(shí)現(xiàn)這一個(gè)抽象方法,我們稱這種接口為函數(shù)式接口。Lambda表達(dá)式就是函數(shù)式接口的實(shí)現(xiàn),來完成對數(shù)據(jù)的處理。
基本函數(shù)的格式JAVA函數(shù)通常是我們類中定義的行為,格式如下:
修飾符 返回類型 函數(shù)名(參數(shù)列表){ 語句塊 return 返回值; }
修飾符:函數(shù)的可見性,決定函數(shù)的使用范圍
返回類型:函數(shù)的輸出信息,與return配合使用
函數(shù)名:函數(shù)標(biāo)識(shí)
參數(shù)列表:函數(shù)的輸入信息
語句塊:函數(shù)執(zhí)行的操作
這就是函數(shù)的基本格式。
代碼中函數(shù)名,返回類型是一定要有的,其他的可有可無。
所以代碼中最簡單的函數(shù)定義格式如下:
返回類型 函數(shù)名();Lambda表達(dá)式格式
我們說Lambda表達(dá)式是一個(gè)匿名函數(shù),那我們來看一下Lambda表達(dá)式的格式。
(參數(shù)列表) -> {語句塊}
參數(shù)列表:函數(shù)的輸入信息
->: Lambda表達(dá)式關(guān)鍵符(也可以理解成關(guān)鍵字)
語句塊:函數(shù)執(zhí)行的操作
“->”是必須有的,我們來看下最簡單的Lambda表達(dá)式結(jié)構(gòu):
() -> {}
Lambda表達(dá)式是一個(gè)表達(dá)式,程序中被作為一個(gè)值來使用。JAVA語言是強(qiáng)類型面向?qū)ο蟮恼Z言,所以必須提供一種數(shù)據(jù)類型作為Lambda表達(dá)式的返回值類型、符合JAVA中函數(shù)格式的定義、符合面向?qū)ο笠?guī)則,所以最終Lambda表達(dá)式要有一個(gè)映射成JAVA對象的過程。
函數(shù)式接口函數(shù)式接口是用來完成Lambda表達(dá)式映射成JAVA對象的一種接口,確切的說把接口中僅存的一個(gè)抽象方法和Lambda表達(dá)式綁定并完成對象的實(shí)例化。
那么接口是如何與Lambda表達(dá)式建立類型關(guān)系的?
接口的抽象方法。下面舉例說明。
定一個(gè)函數(shù)式接口
/** * @author Stephen Yue */ public interface Nothing { void doNothing(); }
我們在接口里定義了一個(gè)沒有參數(shù)、返回值的抽象方法。
接口我們定義好了,需要我們定義接口的實(shí)現(xiàn)方式。我們選取Lambda表達(dá)式來完成這個(gè)實(shí)現(xiàn)。
// 指定接口中方法的實(shí)現(xiàn)過程并創(chuàng)建對象 Nothing nothing = () -> {}; nothing.doNothing();
給Nothing接口中doNothing方法指定了一個(gè)空實(shí)現(xiàn)的Lambda表達(dá)式。即沒有參數(shù)、沒有返回值、什么都不做的一個(gè)空實(shí)現(xiàn)。所以執(zhí)行之后沒有任何結(jié)果。我們改一下實(shí)現(xiàn)方式。
Nothing nothing = () -> { System.out.println("hello Lambda!"); }; nothing.doNothing();
新的Lambda表達(dá)式實(shí)現(xiàn)同樣符合接口中抽象方法定義的要求,不過程序執(zhí)行完,會(huì)在控制臺(tái)輸出:hello Lambda!
總結(jié)Lambda表達(dá)式的出現(xiàn),提供了新的接口實(shí)現(xiàn)方式。接口中抽象方法名字是Lambda表達(dá)式的標(biāo)識(shí)符,接口中參數(shù)類型對應(yīng)Lambda表達(dá)式的參數(shù)類型,接口中返回類型對應(yīng)Lambda表達(dá)式返回類型,Lambda表達(dá)式的語句塊來完成抽象方法的邏輯實(shí)現(xiàn)。
Lambda表達(dá)式的優(yōu)點(diǎn):
簡碼
面向函數(shù)式編程(也可以理解面向接口編程)
閉包
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/70750.html
摘要:在支持一類函數(shù)的語言中,表達(dá)式的類型將是函數(shù)。匿名函數(shù)的返回類型與該主體表達(dá)式一致如果表達(dá)式的主體包含一條以上語句,則表達(dá)式必須包含在花括號(hào)中形成代碼塊。注意,使用表達(dá)式的方法不止一種。 摘要:此篇文章主要介紹 Java8 Lambda 表達(dá)式產(chǎn)生的背景和用法,以及 Lambda 表達(dá)式與匿名類的不同等。本文系 OneAPM 工程師編譯整理。 Java 是一流的面向?qū)ο笳Z言,除了部分簡...
摘要:表達(dá)式簡介表達(dá)式是一個(gè)匿名函數(shù)對于而言并不很準(zhǔn)確,但這里我們不糾結(jié)這個(gè)問題。如果表達(dá)式的正文有一條以上的語句必須包含在大括號(hào)代碼塊中,且表達(dá)式的返回值類型要與匿名函數(shù)的返回類型相同。 版權(quán)聲明:本文由吳仙杰創(chuàng)作整理,轉(zhuǎn)載請注明出處:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我們想要把某些功能傳遞給某些方...
摘要:初體驗(yàn)下面進(jìn)入本文的正題表達(dá)式。接下來展示表達(dá)式和其好基友的配合。吐槽一下方法引用表面上看起來方法引用和構(gòu)造器引用進(jìn)一步簡化了表達(dá)式的書寫,但是個(gè)人覺得這方面沒有的下劃線語法更加通用。 感謝同事【天錦】的投稿。投稿請聯(lián)系 tengfei@ifeve.com 本文主要記錄自己學(xué)習(xí)Java8的歷程,方便大家一起探討和自己的備忘。因?yàn)楸救艘彩莿倓傞_始學(xué)習(xí)Java8,所以文中肯定有錯(cuò)誤和理解偏...
摘要:表達(dá)式的主要作用就是代替匿名內(nèi)部類的煩瑣語法。從這點(diǎn)來看,表達(dá)式的代碼塊與匿名內(nèi)部類的方法體是相同的。與匿名內(nèi)部類相似的是,由于表達(dá)式訪問了局部變量,該局部變量相當(dāng)于與一個(gè)隱式的修飾,因此不允許對局部變量重新賦值。 函數(shù)式接口 函數(shù)式接口(Functional Interface)就是一個(gè)只有一個(gè)抽象方法(可以包含多個(gè)默認(rèn)方法或多個(gè)static方法)的普通接口,可以被隱式轉(zhuǎn)換為lamb...
摘要:表達(dá)式又名閉包匿名函數(shù)筆記根據(jù)終于在中引入了表達(dá)式。函數(shù)式接口要介紹中表達(dá)式的實(shí)現(xiàn),需要知道什么是函數(shù)式接口。但同樣需要保證外部的自由變量不能在表達(dá)式中被改變。 Java Lambda 表達(dá)式(又名閉包 (Closure)/ 匿名函數(shù) ) 筆記 根據(jù) JSR 335, Java 終于在 Java 8 中引入了 Lambda 表達(dá)式。也稱之為閉包或者匿名函數(shù)。 showImg(https...
閱讀 1000·2021-11-22 12:09
閱讀 3780·2021-09-27 13:36
閱讀 1468·2021-08-20 09:37
閱讀 4145·2019-12-27 12:22
閱讀 2424·2019-08-30 15:55
閱讀 2426·2019-08-30 13:16
閱讀 2903·2019-08-26 17:06
閱讀 3497·2019-08-23 18:32