使用Optional.orElseThrow在Stream中抛出RuntimeException

时间:2016-08-22 09:38:17

标签: java java-stream optional runtimeexception

以下代码可以正常使用:

Stream.of("key1", "key2")
   .map(key -> {
      SomeObject foo = service.find(key);
      if (foo == null) {
         throw new RuntimeException("No entity found with key: " + key);
      }
      return foo;
   })
   // ...

但是,当我从Optional中使用orElseThrow时:

Stream.of("key1", "key2")
   .map(key -> Optional.ofNullable(someService.find(key))
         .orElseThrow(() -> new RuntimeException("No entity found with key: " + key)))
   // ...

我收到编译时错误:

  

错误:(129,33)java:未报告异常X;必须被抓住或   宣布被抛出

两者都抛出一个RuntimeException,任何想法为什么使用Optional的方法都不起作用?

更新:我的构建基础架构,我尝试使用IntelliJ和Maven编译它:

$ mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: C:\Tools\apache-maven-3.3.9
Java version: 1.8.0_91, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_91\jre
Default locale: de_AT, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

1 个答案:

答案 0 :(得分:13)

这是一个编译器错误JDK-8047338,它阻止了正确的通用异常类型推断。它已在1.8.0_92版本中得到部分解决。