1 回答
TA贡献1946条经验 获得超3个赞
这是因为Stream.map具有以下签名:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
在这种情况下,R是A<? extends B>。因此,函数的返回值是隐式的
? extends A<? extends B>
这可以通过更改返回类型来很好地编译:
<T extends B> Stream<? extends A<? extends B>> find() {
return findAll() // Stream<Optional<A<? extends B>>>
.map(Optional::get) // Stream<A<capture of ? extends B>>
.filter(a -> false); // Stream<A<capture of ? extends B>>
}
或显式转换函数以返回A<? extends B>:
<T extends B> Stream<A<? extends B>> find() {
return findAll()
.map((Function<Optional<A<? extends B>>, A<? extends B>>) Optional::get)
.filter(a -> false);
}
澄清一下, a Stream<C>, where C extends A<B>,本身不是 a Stream<A<? extends B>>。
添加回答
举报