【问题标题】:How do I let eclipse report unreported exception in completable futures?如何让 eclipse 在可完成的期货中报告未报告的异常?
【发布时间】:2023-04-02 01:50:01
【问题描述】:

我在我的代码中发现了一个类似于此要点的错误: https://gist.github.com/rompetroll/667bf46ac0168a92497a

如果我直接在.thenApply(Func) 方法中定义这样的lambda,我会得到未报告的异常编译错误。

不起作用:

Optional o = Optional.of(nullable);

return myComplFuture
  .thenApply(o -> o.orElseThrow(() -> new RuntimeException("nah"));

这确实有效:

Optional o = Optional.of(nullable);
Function<Optional<String>, String> stringOrException = o -> o.orElseThrow(() -> new RuntimeException("nah");

return myComplFuture
  .thenApply(stringOrException);

那么,谁能告诉我,为什么第一个不能编译,而后者可以? 也可以请任何人告诉我如何在eclipse中标记这个错误?

我尝试过的事情: 窗口 -> 首选项 -> Java -> 编译器 -> 错误/警告 但是我没有找到任何可以显示 eclipse 中的编译器错误的东西。事实上,eclipse 并没有在这条线旁边显示一个红色的 x。但是每次我运行mvn test 时,编译器都会抱怨,如要点所示。

提前致谢!

【问题讨论】:

  • jdk1.8.0_111 上没有repro,但在jdk1.8.0_11 上repro,所以看起来这是一个后来修复的JDK 错误(并且由于eclipse 使用自己的编译器,它没有错误) ,您可以添加maven-enforcer-plugin,这样当您使用对您的项目来说太旧的JDK版本时它会警告您
  • 我在基于 jdk1.8.9u51 构建的 ibm-j9 上进行测试。我会调查并报告。
  • @Ferrybig 我认为这有点不同,因为我不使用包含异常的类型化类。您也可以添加您的评论作为答案,我很乐意接受。这是一个编译器问题。如果stackoverflow.com/questions/24986279/…也可以通过升级javac(SDK)解决。
  • 另外,我的问题是:如何让 eclipse 显示这种错误?谢谢!
  • 不可能让 eclipse 显示这些,因为根据语法它的有效 java 代码,只是 javac 有问题的代码的错误(稍后在较新的版本中得到修复)。根据 [How to configure Eclipse to compile using Oracle javac 1.7.0_09?](stackoverflow.com/a/14186301/1542723 ) eclipse 使用自己的编译器来提供正确的语法 highlinthing 和其他东西,对于某些有效的 java 语法之王,双方都有其独特的错误

标签: java eclipse lambda compiler-errors


【解决方案1】:

Afaik,没有办法让 Eclipse IDE 使用javac,但你可以make Maven use the Eclipse compiler,以避免编辑器突出显示和 maven 构建之间的不一致。

关于这个特定问题,它似乎是一个编译器错误,与类型推断有关,存在于更新 77 之前的所有版本中,但不存在于更新 92 及更高版本中。所以这个具体问题也可以通过更新jdk来解决。

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多