3 回答

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
.

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)論。

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
添加回答
舉報(bào)