我有一个返回Stream类型的方法A。B我也有一个A. 该方法创建一个Stream它填充的实例,由于继承B,这些实例也是类型。A这很好用,直到我在Stream. 然后,编译器决定 Stream 是 typeB而不是A,继承似乎无关紧要。为什么会这样?
这是一个最小的可重现示例:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class Main {
abstract class A {
int member;
}
class B extends A {
public B(int member) {
this.member = member;
}
}
public static void main(String[] args) {
Stream<A> stream = getStream();
}
private Stream<A> getStream() {
List<Integer> ints = new ArrayList<>();
ints.add(1);
ints.add(2);
ints.add(3);
return ints.stream().map(B::new).filter(b -> true); // Filter causes compiler to throw error
}
}