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