丁香花高清在线完整版,聚会的目的韩国电影,办公室椅子上,少女在线观看高清完整版免费动漫,无码人妻av久久久一区二区三区

千鋒教育-做有情懷、有良心、有品質(zhi)的職業教育機(ji)構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時(shi)隨地免費(fei)學習(xi)課程

當(dang)前(qian)位置(zhi):首頁  >  千鋒問問  > 匿名內部類和lambda表達式區別

匿名內部類和lambda表達式區別

匿(ni)名提(ti)問者  2023-05-22 14:38:00

匿(ni)名(ming)內部類(lei)和lambda表達(da)式區別

我要提問

推薦答案

  匿名內部類和lambda表達式都(dou)可以用來實現一(yi)個函數接口(Functional Interface)的實例,它們的主要區別如下:

  1. 語法形式:匿名內部(bu)類(lei)是(shi)java的一(yi)(yi)種特性,語(yu)法形式比較冗長,需要使(shi)用(yong)關鍵(jian)字、大(da)括(kuo)號(hao)、分號(hao)等,使(shi)用(yong)起來稍顯繁瑣。而lambda表達(da)式是(shi)從JDK8開始(shi)引入(ru)的,語(yu)法簡單,可以看作是(shi)對匿名內部(bu)類(lei)的一(yi)(yi)種簡化和(he)優化。

  2. 對上下文變量的捕獲:匿名(ming)內(nei)部(bu)類(lei)中(zhong)可(ke)以訪問外部(bu)類(lei)的成員變(bian)(bian)量、方法參數和本地變(bian)(bian)量,它(ta)們(men)的值都可(ke)以在匿名(ming)內(nei)部(bu)類(lei)中(zhong)被修(xiu)改。而lambda表達式中(zhong)只能捕獲最(zui)終(zhong)(zhong)變(bian)(bian)量或(huo)者是事(shi)實上的最(zui)終(zhong)(zhong)變(bian)(bian)量(final或(huo)者等價于(yu)final),也就是只能讀取(qu)外部(bu)變(bian)(bian)量,不(bu)能修(xiu)改。如果需要修(xiu)改則使用(yong)會報編譯錯誤。

  3. 類型推導和函數接口:在使用lambda表(biao)達式時(shi),JDK8可(ke)以(yi)推導出(chu)lambda表(biao)達式的參(can)數類(lei)(lei)型(xing)和(he)返回類(lei)(lei)型(xing)。因此,使用lambda表(biao)達式時(shi)不(bu)需要顯示聲(sheng)(sheng)明類(lei)(lei)型(xing)。而匿名內(nei)部類(lei)(lei)需要顯式地(di)聲(sheng)(sheng)明接口和(he)類(lei)(lei)類(lei)(lei)型(xing)。

  4. 代碼量:lambda表達式的語法更(geng)加精簡,代(dai)(dai)碼量相對較小,而(er)且可讀性(xing)更(geng)強,降低(di)了程序員的輸入疲勞度。而(er)匿名內部類語法冗長,代(dai)(dai)碼量較大(da)。

  總之,lambda表達(da)式是一(yi)種(zhong)更(geng)為(wei)優雅簡潔的(de)編程方式,而匿名內部類(lei)(lei)則依舊(jiu)存(cun)在一(yi)定的(de)應用場景,例如需(xu)要(yao)訪問外部類(lei)(lei)的(de)成員(yuan)變(bian)量(liang),或者(zhe)需(xu)要(yao)實現一(yi)些非函數接口的(de)抽象方法等。

其他答案

  •   匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)和(he) Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)都(dou)是(shi)在(zai) Java 中用(yong)(yong)(yong)于實(shi)現(xian)函(han)數式(shi)(shi)(shi)(shi)(shi)編(bian)程(cheng)的(de)(de)機制,但它(ta)們在(zai)語法(fa)和(he)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)上有(you)一些區別。1. 語法(fa):匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)關鍵字 `new` 創建一個(ge)實(shi)現(xian)特定(ding)接(jie)(jie)口(kou)或(huo)抽象類(lei)的(de)(de)匿名(ming)(ming)(ming)(ming)類(lei),并在(zai)大(da)括號中實(shi)現(xian)其方(fang)(fang)法(fa)。Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)箭頭 `->` 分隔參數列表(biao)和(he)方(fang)(fang)法(fa)體,可(ke)以(yi)直(zhi)接(jie)(jie)表(biao)示一個(ge)函(han)數。2. 類(lei)型(xing)推斷(duan):匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)在(zai)創建時(shi)需(xu)要顯(xian)式(shi)(shi)(shi)(shi)(shi)指(zhi)定(ding)接(jie)(jie)口(kou)或(huo)抽象類(lei)的(de)(de)類(lei)型(xing),編(bian)譯器通過類(lei)型(xing)推斷(duan)來確定(ding)匿名(ming)(ming)(ming)(ming)類(lei)的(de)(de)類(lei)型(xing)。Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)可(ke)以(yi)根據上下(xia)文(wen)推斷(duan)出(chu)參數的(de)(de)類(lei)型(xing),無需(xu)顯(xian)式(shi)(shi)(shi)(shi)(shi)指(zhi)定(ding)。3. 簡潔性(xing):Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)相比(bi)(bi)匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)更加簡潔,可(ke)以(yi)省略方(fang)(fang)法(fa)參數的(de)(de)類(lei)型(xing)和(he)大(da)括號內(nei)(nei)(nei)的(de)(de)冗余代碼,使(shi)(shi)(shi)(shi)代碼更加精(jing)煉和(he)易讀(du)。4. 作用(yong)(yong)(yong)域:匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)可(ke)以(yi)引用(yong)(yong)(yong)外部(bu)(bu)類(lei)的(de)(de)成員變(bian)(bian)量(liang)和(he)方(fang)(fang)法(fa),而 Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)只能引用(yong)(yong)(yong) final 或(huo) effectively final 的(de)(de)變(bian)(bian)量(liang)。5. 實(shi)例(li)(li)化(hua)方(fang)(fang)式(shi)(shi)(shi)(shi)(shi):匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong) `new` 關鍵字實(shi)例(li)(li)化(hua),每次(ci)實(shi)例(li)(li)化(hua)都(dou)會創建一個(ge)新的(de)(de)對象。Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)是(shi)函(han)數式(shi)(shi)(shi)(shi)(shi)接(jie)(jie)口(kou)的(de)(de)實(shi)例(li)(li),它(ta)們在(zai)運(yun)行時(shi)被轉化(hua)為函(han)數式(shi)(shi)(shi)(shi)(shi)接(jie)(jie)口(kou)的(de)(de)實(shi)現(xian)實(shi)例(li)(li)。總體而言(yan),Lambda 表(biao)達(da)(da)式(shi)(shi)(shi)(shi)(shi)相比(bi)(bi)匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)更加簡潔、靈活,并且(qie)可(ke)以(yi)利(li)用(yong)(yong)(yong) Java 8 引入的(de)(de)函(han)數式(shi)(shi)(shi)(shi)(shi)接(jie)(jie)口(kou)來實(shi)現(xian)函(han)數式(shi)(shi)(shi)(shi)(shi)編(bian)程(cheng)。但在(zai)一些復雜的(de)(de)場景下(xia),匿名(ming)(ming)(ming)(ming)內(nei)(nei)(nei)部(bu)(bu)類(lei)仍然有(you)其用(yong)(yong)(yong)武之(zhi)地,例(li)(li)如需(xu)要引用(yong)(yong)(yong)外部(bu)(bu)類(lei)的(de)(de)成員變(bian)(bian)量(liang)或(huo)方(fang)(fang)法(fa),或(huo)需(xu)要實(shi)現(xian)多個(ge)方(fang)(fang)法(fa)的(de)(de)情況。選擇使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)哪(na)種方(fang)(fang)式(shi)(shi)(shi)(shi)(shi)取決于具體的(de)(de)需(xu)求和(he)編(bian)程(cheng)風格。

  •   匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)和(he)(he)lambda表(biao)達(da)(da)式(shi)都是(shi)(shi)Java中的(de)(de)(de)(de)復(fu)雜(za)語(yu)(yu)法(fa)結構(gou)(gou),主要是(shi)(shi)用(yong)來(lai)定(ding)義函數(shu)(shu)(shu)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)或(huo)類(lei)(lei)(lei)(lei)的(de)(de)(de)(de)實(shi)(shi)(shi)現(xian)(xian)。但是(shi)(shi),這兩種結構(gou)(gou)在(zai)使(shi)用(yong)和(he)(he)實(shi)(shi)(shi)現(xian)(xian)上(shang)存(cun)在(zai)一(yi)些(xie)顯(xian)著的(de)(de)(de)(de)區(qu)別。首先(xian),匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)和(he)(he)lambda表(biao)達(da)(da)式(shi)都可(ke)以(yi)(yi)用(yong)來(lai)實(shi)(shi)(shi)現(xian)(xian)抽象(xiang)類(lei)(lei)(lei)(lei)或(huo)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)。在(zai)使(shi)用(yong)匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)時(shi)(shi)(shi),需要通(tong)(tong)過實(shi)(shi)(shi)現(xian)(xian)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)或(huo)繼(ji)承抽象(xiang)類(lei)(lei)(lei)(lei)來(lai)定(ding)義類(lei)(lei)(lei)(lei)的(de)(de)(de)(de)實(shi)(shi)(shi)現(xian)(xian),并(bing)(bing)(bing)且必須使(shi)用(yong)類(lei)(lei)(lei)(lei)的(de)(de)(de)(de)構(gou)(gou)造(zao)函數(shu)(shu)(shu)來(lai)創(chuang)建對象(xiang)實(shi)(shi)(shi)例(li)。而lambda表(biao)達(da)(da)式(shi)則(ze)(ze)不需要實(shi)(shi)(shi)現(xian)(xian)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)或(huo)繼(ji)承抽象(xiang)類(lei)(lei)(lei)(lei),可(ke)以(yi)(yi)直接(jie)(jie)(jie)定(ding)義函數(shu)(shu)(shu)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)的(de)(de)(de)(de)實(shi)(shi)(shi)現(xian)(xian),并(bing)(bing)(bing)且在(zai)使(shi)用(yong)時(shi)(shi)(shi)可(ke)以(yi)(yi)直接(jie)(jie)(jie)通(tong)(tong)過該表(biao)達(da)(da)式(shi)創(chuang)建對象(xiang)實(shi)(shi)(shi)例(li)。其次,匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)和(he)(he)lambda表(biao)達(da)(da)式(shi)的(de)(de)(de)(de)語(yu)(yu)法(fa)結構(gou)(gou)也存(cun)在(zai)一(yi)些(xie)不同。匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)是(shi)(shi)在(zai)定(ding)義類(lei)(lei)(lei)(lei)的(de)(de)(de)(de)同時(shi)(shi)(shi)創(chuang)建對象(xiang)實(shi)(shi)(shi)例(li),將類(lei)(lei)(lei)(lei)的(de)(de)(de)(de)構(gou)(gou)造(zao)函數(shu)(shu)(shu)和(he)(he)實(shi)(shi)(shi)例(li)化(hua)代碼(ma)(ma)合并(bing)(bing)(bing)在(zai)一(yi)起。而lambda表(biao)達(da)(da)式(shi)則(ze)(ze)是(shi)(shi)通(tong)(tong)過符號“->”將參數(shu)(shu)(shu)和(he)(he)函數(shu)(shu)(shu)體(ti)分隔開來(lai),來(lai)定(ding)義函數(shu)(shu)(shu)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)的(de)(de)(de)(de)實(shi)(shi)(shi)現(xian)(xian)。另(ling)外,匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)和(he)(he)lambda表(biao)達(da)(da)式(shi)在(zai)代碼(ma)(ma)的(de)(de)(de)(de)可(ke)讀性(xing)和(he)(he)簡潔性(xing)上(shang)也存(cun)在(zai)很大的(de)(de)(de)(de)差異。雖然匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)可(ke)以(yi)(yi)很好地(di)封裝代碼(ma)(ma),但是(shi)(shi)由于其語(yu)(yu)法(fa)結構(gou)(gou)較為復(fu)雜(za),在(zai)編(bian)寫和(he)(he)閱讀時(shi)(shi)(shi)可(ke)能會導致代碼(ma)(ma)的(de)(de)(de)(de)可(ke)讀性(xing)降低。而lambda表(biao)達(da)(da)式(shi)則(ze)(ze)使(shi)用(yong)較為簡潔的(de)(de)(de)(de)語(yu)(yu)法(fa)結構(gou)(gou),并(bing)(bing)(bing)且不需要創(chuang)建額外的(de)(de)(de)(de)類(lei)(lei)(lei)(lei)或(huo)對象(xiang),可(ke)以(yi)(yi)提高代碼(ma)(ma)的(de)(de)(de)(de)可(ke)讀性(xing)和(he)(he)簡潔性(xing)。最后, 匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)和(he)(he)lambda表(biao)達(da)(da)式(shi)也存(cun)在(zai)一(yi)些(xie)適用(yong)的(de)(de)(de)(de)場景(jing)上(shang)的(de)(de)(de)(de)區(qu)別。匿名(ming)內(nei)部類(lei)(lei)(lei)(lei)適用(yong)于需要實(shi)(shi)(shi)現(xian)(xian)多個接(jie)(jie)(jie)口(kou)(kou)(kou)(kou)或(huo)重(zhong)復(fu)定(ding)義某(mou)個類(lei)(lei)(lei)(lei)時(shi)(shi)(shi)使(shi)用(yong)。而lambda表(biao)達(da)(da)式(shi)則(ze)(ze)主要用(yong)于實(shi)(shi)(shi)現(xian)(xian)單一(yi)的(de)(de)(de)(de)函數(shu)(shu)(shu)接(jie)(jie)(jie)口(kou)(kou)(kou)(kou),并(bing)(bing)(bing)且可(ke)以(yi)(yi)方(fang)便地(di)進行函數(shu)(shu)(shu)式(shi)編(bian)程。