第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

編譯器如何知道 lambda 正在實(shí)現(xiàn)哪個(gè)類?

編譯器如何知道 lambda 正在實(shí)現(xiàn)哪個(gè)類?

Helenr 2023-11-10 17:06:07
我看到單參數(shù)構(gòu)造函數(shù)Thread()同時(shí)采用Runnable和。String編譯器如何知道 alambda正在實(shí)現(xiàn)一個(gè)Runnable類而不是一個(gè)String類?    (new Thread( () -> {         System.out.println("Deleting stats...");     })).start();也許它取決于類/接口中方法的數(shù)量?但是,如果一個(gè)類有多個(gè)構(gòu)造函數(shù),這些構(gòu)造函數(shù)采用只有一個(gè)方法的單個(gè)參數(shù)類,例如:Thread( Runnable r ); Thread( Comparable c ); Thread( ActionListener al );當(dāng)你嘗試實(shí)現(xiàn)lambdathen 時(shí)會(huì)發(fā)生什么?編譯器如何知道正在lambda實(shí)現(xiàn)哪個(gè)類?
查看完整描述

2 回答

?
三國紛爭

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

Java 編譯器必須為 lambda 表達(dá)式的類型選擇函數(shù)接口類型。這受JLS 第 15.27.3 條管轄,其中規(guī)定:

如果 T 是函數(shù)接口類型(第 9.8 節(jié))并且表達(dá)式與從 T 派生的基本目標(biāo)類型的函數(shù)類型一致,則 lambda 表達(dá)式在賦值上下文、調(diào)用上下文或轉(zhuǎn)換上下文中與目標(biāo)類型T兼容

該類型String不是函數(shù)式接口類型,但Runnable確實(shí)是。lambda 不接受參數(shù)也不返回?cái)?shù)據(jù),因此它與一致Runnable

更一般地,lambda 表達(dá)式中的參數(shù)類型必須與函數(shù)接口類型的單個(gè)抽象方法的參數(shù)類型匹配,并且返回類型也必須匹配。

在您的示例中,3 種功能接口類型中的每一種都是不同的,因此最多有一種會(huì)匹配。如果有多個(gè)可能匹配的函數(shù)接口類型,那么這將是不明確的,只能通過將 lambda 表達(dá)式轉(zhuǎn)換為預(yù)期的函數(shù)接口類型來解決。


查看完整回答
反對(duì) 回復(fù) 2023-11-10
?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

Lambda 表達(dá)式被轉(zhuǎn)換為實(shí)現(xiàn)函數(shù)式接口的類的實(shí)例?!昂瘮?shù)式接口”是指其中僅包含 1 個(gè)(非默認(rèn))方法的接口。

String 不是一個(gè)接口 - 它是一個(gè)類。因此,編譯器查看 lambda 表達(dá)式,并知道如果代碼有意義,那么它應(yīng)該將 lambda 轉(zhuǎn)換為 Runnable 實(shí)現(xiàn)的實(shí)例,因?yàn)檫@是唯一可能起作用的東西!


查看完整回答
反對(duì) 回復(fù) 2023-11-10
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)