在将Map映射到使用泛型类型的超级用户之后使用orElse编译错误

时间:2015-12-28 16:15:08

标签: java generics dictionary java-stream super

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

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

    $last = $this->uri->total_segments();
    $lastSegment = $this->uri->segment($last);
    if ($this->input->post("fromAjax")) {
        if($lastSegment == "rawAttendance"){
            $this->load->view('attendance/rawAttendance', $data);
        }else if($lastSegment == "getAttendance"){
            $this->load->view('attendance/getAttendance', $data);
        }else {
        }
    } 

但是,当使用任何Map的消费者时,orElse:

会发生编译错误
// 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 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);
}

有人能澄清这里出了什么问题吗?谢谢:))

编辑:这是在jdk1.8.0_45。

1 个答案:

答案 0 :(得分:2)

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

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