【发布时间】: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