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

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

你能解釋一下為什么第一個(gè)展開的方法引用不能編譯嗎?

你能解釋一下為什么第一個(gè)展開的方法引用不能編譯嗎?

ibeautiful 2022-07-06 18:41:53
在這個(gè)例子中,傳遞一個(gè)方法引用Stream.of是行不通的,但是一旦它被包裝它就可以工作了。我不明白為什么會(huì)這樣。方法引用不等同于功能接口嗎?public class A {    String a() {        return "";    }    void b() {        Stream.of(this::a); // won't compile        Stream.of(wrap(this::a)); // will compile    }    static <T> Supplier<T> wrap(Supplier<T> f) {        return f;    }}
查看完整描述

3 回答

?
桃花長(zhǎng)相依

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

Stream.of(T)期望 anObject并且您在第一條語(yǔ)句中將方法引用傳遞給它。但是Object參數(shù)不是函數(shù)式接口,因此它不能接受方法引用或未明確鍵入的 lambda。
使用 lambda,它也會(huì)產(chǎn)生一個(gè)錯(cuò)誤:Stream.of(()->this.a())。
一個(gè)更簡(jiǎn)單的例子可能是 Stream.of(()-> "foo")它不會(huì)編譯。

但是,如果您鍵入方法引用或 lambda,它會(huì)起作用:

Stream.of((Supplier<String>) this::a)

或者

Stream.of((Supplier<String>) () -> this.a())

在工作語(yǔ)句中,您傳遞給Stream.of(T)一個(gè)參數(shù)是Supplier<String>. 它指的是一個(gè)功能接口,但它的類型與前面的工作示例一樣,因此它作為需要Object.


查看完整回答
反對(duì) 回復(fù) 2022-07-06
?
哆啦的時(shí)光機(jī)

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

this::a是無(wú)上下文的,可能意味著不同的東西。您需要提供一些上下文來(lái)幫助編譯器弄清楚您的實(shí)際意思this::a。


Stream.<Supplier<String>>of(this::a);

不過(guò),這Stream<Supplier<String>>似乎不是你想要的。如果您需要 a Stream<String>,請(qǐng)使用Stream.generate: 不需要額外的類型信息,因?yàn)樵摲椒ú捎?a Supplier<T>(這里沒(méi)有歧義)。


Stream.generate(this::a);

附帶說(shuō)明一下,這兩個(gè)語(yǔ)句都希望您將它們的結(jié)果保存到變量中。定義正確類型的變量通常有助于解決此類問(wèn)題。


Stream<Supplier<String>> s1 = Stream.of(this::a);

Stream<String> s2 = Stream.generate(this::a);

感謝@J-Alex 和@Holger 的寶貴評(píng)論。


查看完整回答
反對(duì) 回復(fù) 2022-07-06
?
皈依舞

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

Stream.of具有以下簽名:


public static<T> Stream<T> of(T t)

以下示例將編譯,因?yàn)槟鞔_提供了T.


Stream<Supplier<String>> a = Stream.of(this::a);

第一個(gè)示例Stream.of(this::a);相當(dāng)于:


Object a = this::a;

whereObject不是功能接口,不會(huì)編譯。


提供一個(gè)功能接口,這個(gè)例子編譯:


Runnable a = this::a;

Stream.of(a);

在第二個(gè)例子中,wrap提供了一個(gè)功能接口Supplier


查看完整回答
反對(duì) 回復(fù) 2022-07-06
  • 3 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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