使用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。
答案 0 :(得分:2)
这似乎是Eclipse Mars Java编译器的一个问题
Eclipse有自己的编译器,不使用javac
。
javac 1.8.0_45
我的机器上没有问题,而Eclipse Mars则显示您所描述的错误。