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;
这将编译。
当你说这个步骤不应该完成任何事情时,这是好的,不正确的。看看的定义: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;
编译。
添加回答
举报