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

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

為什么可選地圖使此分配有效?

為什么可選地圖使此分配有效?

蠱毒傳說 2022-09-21 16:30:22
Optional<ArrayList<String>> option = Optional.of(new ArrayList<>()); Optional<ArrayList<?>> doesntWork = option; Optional<ArrayList<?>> works = option.map(list -> list);第一個嘗試的賦值不會編譯,但第二個嘗試的賦值會編譯。感覺實際上不應該完成任何事情,但由于某種原因,它把我的變成了一個.有沒有某種隱含的演員陣容?mapmapOptional<ArrayList<String>>Optional<ArrayList<?>>
查看完整描述

4 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

如果您查看并遵循所有方法調用的代碼,您會發現它最終會返回 。因此,您可以將上一個作業替換為:mapoption.map(list -> list)new Optional<>(option.get())

Optional<ArrayList<?>> works = new Optional<>(option.get());

這將創建一個新的變量,并用 返回的 來初始化其實例變量(其類型為 )。這是一個有效的分配。Optional<ArrayList<?>>valueArrayList<?>ArrayList<String>map.get()

有沒有某種隱含的演員陣容?

否,返回新實例。它不會強制轉換調用它的原始實例。mapOptional

下面是方法調用鏈:

option.map(list -> list)

返回 (因為 不為空)option

Optional.ofNullable(mapper.apply(value))

在您的情況下與

Optional.ofNullable(value)

返回(因為值不為空):

Optional.of(value)

返回

new Optional<>(value)


查看完整回答
反對 回復 2022-09-21
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

好吧,第一個不起作用,因為泛型是不變的,使它們協變的唯一方法是添加一個有界類型,例如:


 Optional<? extends ArrayList<String>> doesntWork = option; 

這將編譯。


當你說這個步驟不應該完成任何事情時,這是好的,不正確的??纯吹亩x:mapOptional::map


public <U> Optional<U> map(Function<? super T, ? extends U> mapper) {

    Objects.requireNonNull(mapper);

    if (!isPresent()) {

        return empty();

    } else {

        return Optional.ofNullable(mapper.apply(value));

    }

}

粗略地說,它確實從轉換為...Optional<T>Optional<U>


查看完整回答
反對 回復 2022-09-21
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

在后一種情況下,方法的返回類型由變量的類型隱式確定。這就是存在差異的原因。Optional.mapworks



查看完整回答
反對 回復 2022-09-21
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

您的簽名option.map

<ArrayList<?>> Optional<ArrayList<?>> java.util.Optional.map(Function<? super ArrayList<String>, ? extends ArrayList<?>> mapper)

所以這個

Optional<? extends ArrayList<?>> doesntWork = option;

編譯。


查看完整回答
反對 回復 2022-09-21
  • 4 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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