亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

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

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

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

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

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

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

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

/*

?* (non-Javadoc)

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

?*/

default Stream<T> get() {

? ? return stream();

}

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


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

TA貢獻1824條經驗 獲得超5個贊

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


問題是在當前上下文中:


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

? ? return Collections.emptyIterator();

}

與以下內容不同:


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

? ? return Collections::emptyIterator;

}

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


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


其實這個方法參考:


return Collections::emptyIterator;

相當于:


return () -> Collections.emptyIterator();

為什么有效?

因為Streamable是定義為函數的功能接口:()-> Iterator<T> 并emptyIterator()返回Iterator<T>。


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號