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

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

Streamable 接口:empty() 方法如何返回 Iterable?

Streamable 接口:empty() 方法如何返回 Iterable?

溫溫醬 2023-05-10 13:16:05
@FunctionalInterfacepublic interface Streamable<T> extends Iterable<T>, Supplier<Stream<T>>我正在探索 Streamable 接口,我遇到的第一個(gè)方法是empty()具有以下定義的方法。static <T> Streamable<T> empty() {        return Collections::emptyIterator;    }Collections::emptyIterator返回Iterator<T>但此方法的返回類型是Streamable<T>。Streamble 擴(kuò)展了 Iterable 和 Supplier 而不是 Iterator 接口。我不明白這是怎么回事。有人可以幫助我理解這一點(diǎn)嗎?我只是沒能理解這里的概念。我想知道這是如何工作的,因?yàn)槲抑览^承是如何工作的,但我無法弄清楚。我想我在這里遺漏了一些東西。
查看完整描述

2 回答

?
牛魔王的故事

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

empty()返回一個(gè)方法引用Collections::emptyIterator。

為了使此代碼通過編譯,該方法引用必須符合接口的單個(gè)抽象方法Streamable<>。

CollectionsemptyIterator()接受任何參數(shù)并返回一個(gè)Iterator<T>.

Streamable<>擴(kuò)展了Iterable<T>Supplier<Stream<T>>,這意味著它必須實(shí)現(xiàn)兩個(gè)方法(iterator()get()),但其中一個(gè)不能是抽象的(否則它就不是函數(shù)式接口)。

CollectionsemptyIterator()可以符合Iterable<T>Iterator<T> iterator()簽名。

因此,如果Streamable<T>有一個(gè)默認(rèn)實(shí)現(xiàn)的Supplier<Stream<T>>方法get()(如果沒有,Streamable<T>則不能是功能接口),Collections::emptyIterator可以實(shí)現(xiàn)該Streamable<T>接口。

編輯:如果您指的是org.springframework.data.util.Streamable,您可以看到它確實(shí)有一個(gè)默認(rèn)實(shí)現(xiàn)get()

/*

?* (non-Javadoc)

?* @see java.util.function.Supplier#get()

?*/

default Stream<T> get() {

? ? return stream();

}

因此,任何符合單一抽象方法的方法引用都Iterator<T> iterator()可以實(shí)現(xiàn)該接口。因此Collections::emptyIterator可以實(shí)施Streamable<T>。


查看完整回答
反對 回復(fù) 2023-05-10
?
滄海一幻覺

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

作為記錄,這是完全限定的名稱 :?org.springframework.data.util.Streamable


問題是在當(dāng)前上下文中:


static <T> Streamable<T> empty() {? ??

? ? return Collections.emptyIterator();

}

與以下內(nèi)容不同:


static <T> Streamable<T> empty() {? ??

? ? return Collections::emptyIterator;

}

return Collections.emptyIterator()返回一個(gè)Iterator對象,而該方法需要一個(gè)Streamable. 那確實(shí)不能像你想象的那樣編譯。


但return Collections::emptyIterator不返回Iterator對象。Streamable相反,它定義了與返回的功能接口對象關(guān)聯(lián)的 lambda 主體empty()。


其實(shí)這個(gè)方法參考:


return Collections::emptyIterator;

相當(dāng)于:


return () -> Collections.emptyIterator();

為什么有效?

因?yàn)镾treamable是定義為函數(shù)的功能接口:()-> Iterator<T> 并emptyIterator()返回Iterator<T>。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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