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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

匿名内部类与Lambda表达式

發(fā)布時(shí)間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匿名内部类与Lambda表达式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

匿名內(nèi)部類與Lambda表達(dá)式

一.匿名內(nèi)部類
誰(shuí)沒(méi)有名字:匿名內(nèi)部類指的是接口的實(shí)現(xiàn)類 或者 抽象類的子類沒(méi)有名字。
1.前提:
1)必須要有一個(gè)接口、抽象類(普通類也可以,但是方法不會(huì)強(qiáng)制重寫,不建議)
2)格式:
new 接口/抽象類(){
//復(fù)寫抽象方法
}
3)本質(zhì):匿名內(nèi)部類的本質(zhì)其實(shí)是一個(gè)接口的實(shí)現(xiàn)類【對(duì)象】,或者抽象類的子類【對(duì)象】

2.使用場(chǎng)景:
在實(shí)際運(yùn)用中,如果方法的參數(shù)是父類類型,那么調(diào)用方法時(shí)可以傳遞子類對(duì)象,但是為了圖省事不想寫子類,那么這個(gè)時(shí)候可以使用匿名內(nèi)部類。

public class Demo4 {public static void main(String[] args) {//匿名內(nèi)部類,可調(diào)用方法useCalculator(new Calculator() {@Overridepublic int calc(int a, int b) {return a+b;}}); }public static void useCalculator(Calculator calculator){System.out.println(calculator.calc(10,20));} } interface Calculator{int calc(int a,int b); } 打印結(jié)果 ------------------------------------------------------------------ 30

二.Lambda表達(dá)式
1.前提:
Lambda表達(dá)式的使用是由條件的,必須要有一個(gè)【函數(shù)式接口】,在接口中只能有一個(gè)抽象方法【但是可以有默認(rèn)方法和靜態(tài)方法】。

public class Demo4 {public static void main(String[] args) {//Lambda表達(dá)式(簡(jiǎn)化匿名內(nèi)部類)useCalculator((a, b) -> a+b);}public static void useCalculator(Calculator calculator){System.out.println(calculator.calc(10,20));} }@FunctionalInterface//注解:可用于檢查是否為函數(shù)式接口 interface Calculator{int calc(int a,int b);//可以有默認(rèn)方法,通過(guò)接口實(shí)現(xiàn)類對(duì)象調(diào)用default void getSum(int x,int y){System.out.println(x+y);}//通過(guò)類名調(diào)用static void getMin(int m,int n){System.out.println(Math.min(m,n));} }打印結(jié)果 ------------------------------------------------------------------ 30 //1. Lambda標(biāo)準(zhǔn)格式 (參數(shù)類型1 參數(shù)名1,參數(shù)類型2 參數(shù)名2) -> { 方法體; return 返回值; } //2. Lambda省略格式,省略參數(shù)數(shù)據(jù)類型 (參數(shù)名1,參數(shù)名2) -> { 方法體; return 返回值; } //3. Lambda省略格式,{}中的代碼只有一條語(yǔ)句,那么大括號(hào)可以省略、rerturn和分號(hào)都要省略 (參數(shù)名1,參數(shù)名2) -> 返回值 //4. Lambda省略格式,參數(shù)只有一個(gè)時(shí),()可以省略 參數(shù)名 -> 返回值

三.兩者的不同之處

1.所需類型不同
匿名內(nèi)部類:可以是接口,也可以是抽象類,還可以是具體類
Lambda表達(dá)式:只能是接口
2.使用限制不同
如果接口中有且僅有一個(gè)抽象方法,可以使用Lambda表達(dá)式,也可以使用匿名內(nèi)部類如果接口中多于一個(gè)抽象方法,只能使用匿名內(nèi)部類,而不能使用Lambda表達(dá)式
3.實(shí)現(xiàn)原理不同
匿名內(nèi)部類∶編譯之后,產(chǎn)生一個(gè)單獨(dú)的.class字節(jié)碼文件
Lambda表達(dá)式︰編譯之后,沒(méi)有一個(gè)單獨(dú)的.class字節(jié)碼文件。對(duì)應(yīng)的字節(jié)碼會(huì)在運(yùn)行的時(shí)候動(dòng)態(tài)生成

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的匿名内部类与Lambda表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。