jdk 8u91一个lambda类型推断的bug
公司内部发布maven包是在公司构建服务器上编译的。最近一次上线,发现同样的代码,在本地的jdk8上能编译通过,但是在构建服务器上,就编译报错。
简化后的代码如下:
1 | import java.util.Optional; |
1 | public interface RetryCallback<T, E extends Throwable> { |
用maven编译报错如下:
1 | JavaBugTest.java:[10,36] unreported exception E; must be caught or declared to be thrown |
最后发现,是构建服务器jdk版本太老导致的。
二分法尝试了几个版本,发现8u91不行,但是8u92就能编译通过了。
于是开始调试javac代码,发现两个版本的AST不一样: