Given the following code:
public class Foo {
public static void main(String[] args) {
// List<Object> list = getFooList(); // case A
List list = getFooList(); // case B
boolean b = list.stream().map(Foo::toFoo).allMatch(Foo::is);
}
public static List getFooList() {
return List.of(new Foo());
}
private static Foo toFoo(Object o) {
return (Foo)o;
}
public static boolean is(Foo f) {
return true;
}
}
Case A works fine. Case B fails because map returns a raw stream and is(Object) does not exist
This is surprising to me because i would assume that map(Foo::toFoo) would return a Stream<Foo> because toFoo() returns a Foo.
Why is the compiler not able to determine the type in this case?
I use Java 11 and the Eclipse compiler