4 回答

TA貢獻1982條經驗 獲得超2個贊
如果您查看并遵循所有方法調用的代碼,您會發現它最終會返回 。因此,您可以將上一個作業替換為:map
option.map(list -> list)
new Optional<>(option.get())
Optional<ArrayList<?>> works = new Optional<>(option.get());
這將創建一個新的變量,并用 返回的 來初始化其實例變量(其類型為 )。這是一個有效的分配。Optional<ArrayList<?>>
value
ArrayList<?>
ArrayList<String>
map.get()
有沒有某種隱含的演員陣容?
否,返回新實例。它不會強制轉換調用它的原始實例。map
Optional
下面是方法調用鏈:
option.map(list -> list)
返回 (因為 不為空)option
Optional.ofNullable(mapper.apply(value))
在您的情況下與
Optional.ofNullable(value)
返回(因為值不為空):
Optional.of(value)
返回
new Optional<>(value)

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>

TA貢獻1805條經驗 獲得超9個贊
您的簽名option.map
<ArrayList<?>> Optional<ArrayList<?>> java.util.Optional.map(Function<? super ArrayList<String>, ? extends ArrayList<?>> mapper)
所以這個
Optional<? extends ArrayList<?>> doesntWork = option;
編譯。
添加回答
舉報