Допустим, у меня есть два класса и два метода:
class Scratch {
private class A{}
private class B extends A{}
public Optional<A> getItems(List<String> items){
return items.stream()
.map(s -> new B())
.findFirst();
}
public Optional<A> getItems2(List<String> items){
return Optional.of(
items.stream()
.map(s -> new B())
.findFirst()
.get()
);
}
}
Почему getItems2
компилируется, а getItems
выдает ошибку компилятора
incompatible types: java.util.Optional<Scratch.B> cannot be converted to java.util.Optional<Scratch.A>
Поэтому, когда я get
значение Optional
возвращаемое findFirst
и снова обертываю его с помощью Optional.of
компилятор распознает наследование, но не, если я использую непосредственно результат findFirst
.