JAVA深化篇_41—— Lambda表達(dá)式介紹
Lambda表達(dá)式介紹
Lambda簡介
Lambda 表達(dá)式是 JDK8 的一個新特性,可以取代大部分的匿名內(nèi)部類,寫出更優(yōu)雅的 Java 代碼,尤其在集合的遍歷和其他集合操作中,可以極大地優(yōu)化代碼結(jié)構(gòu)。
在Java語言中,可以為變量賦予一個值:
能否把一個代碼塊賦給一變量嗎?
在Java 8之前,這個是做不到的。但是Java 8問世之后,利用Lambda特性,就可以做到了。
甚至我們可以讓語法變得更簡潔。
在Java 8里面,所有的Lambda的類型都是一個接口,而Lambda表達(dá)式本身,也就是”那段代碼“,需要是這個接口的實現(xiàn)。這是我認(rèn)為理解Lambda的一個關(guān)鍵所在,簡而言之就是,Lambda表達(dá)式本身就是一個接口的實現(xiàn)。直接這樣說可能還是有點讓人困擾,我們繼續(xù)看看例子。我們給上面的aBlockOfCode加上一個類型:
這種只有一個接口函數(shù)需要被實現(xiàn)的接口類型,我們叫它”函數(shù)式接口“。為了避免后來的人在這個接口中增加接口函數(shù)導(dǎo)致其有多個接口函數(shù)需要被實現(xiàn),變成"非函數(shù)接口”,我們可以在這個上面加上一個聲明@FunctionalInterface, 這樣別人就無法在里面添加新的接口函數(shù)了。
Lambda作用
最直觀的作用就是使得代碼變得異常簡潔。
接口要求
雖然使用 Lambda 表達(dá)式可以對某些接口進(jìn)行簡單的實現(xiàn),但并不是所有的接口都可以使用 Lambda 表達(dá)式來實現(xiàn)。Lambda 規(guī)定接口中只能有一個需要被實現(xiàn)的方法,不是規(guī)定接口中只能有一個方法。
jdk 8 中有另一個新特性:default, 被 default 修飾的方法會有默認(rèn)實現(xiàn),不是必須被實現(xiàn)的方法,所以不影響 Lambda 表達(dá)式的使用。
@FunctionalInterface注解作用
@FunctionalInterface標(biāo)記在接口上,“函數(shù)式接口”是指僅僅只包含一個抽象方法的接口。
浙公網(wǎng)安備 33010602011771號