在使用通用类型的 super 将 Map 流式传输到 Consumer 后使用 orElse 编译错误

Compile error using orElse after streaming Map to Consumer with super in generic type

我 运行 在使用 Optional.orElse(..) 方法时出现意外的编译错误。我有一个带有通用类型 E 的 class,我正在尝试通过消费者进行过滤以找到足够的消费者,如果过滤没有结果,则使用提供的消费者。生成的 Consumer 稍后将用于接受类型 E 的元素。为了清楚起见,我已经注释掉了过滤步骤。

使用消费者列表时,一切正常:

// List of Consumer of super of c: works!
public void listMethod(Consumer<? super E> defaultConsumer) {
    List<Consumer<? super E>> list = new ArrayList<>();
    Consumer<? super E> consumer = list.stream()
        //.filter(/*Some filtering which is not relevant*/)
        .findAny()
        .orElse(defaultConsumer);
}

但是,当使用任何事物的Map到Consumer时,在orElse处出现编译错误:

//Map of Object to Consumer of super of C: compile error on orElse
public void mapMethod(Consumer<? super E> defaultConsumer) {
    Map<Object, Consumer<? super E>> map = new HashMap<>();
    Consumer<? super E> consumer = map.entrySet()
        .stream()
        //.filter(/*Some filtering which is not relevant*/)
        .map(Map.Entry::getValue)
        .findAny()
        .orElse(defaultConsumer);
}

错误信息是:

The method orElse(Consumer<capture#3-of ? super E>) in the type Optional<Consumer<capture#3-of ? super E>> is not applicable for the arguments (Consumer<capture#6-of ? super E>)

谁能澄清这里出了什么问题?谢谢:)

编辑:这是在 jdk1.8 上。0_45。

这似乎是 Eclipse Mars Java 编译器的问题。
Eclipse有自己的编译器,不使用javac

javac 1.8.0_45 在我的机器上没有问题,而 Eclipse Mars 显示了您所描述的错误。