OpenJDK11编译报错 java.lang.NullPointerException

使用Maven进行编译时,直接编译失败并提示以下错误

compiler message file broken: key=compiler.misc.msg.bug arguments=11.0.2, {
          
   1}, {
          
   2}, {
          
   3}, {
          
   4}, {
          
   5}, {
          
   6}, {
          
   7}
java.lang.NullPointerException
	at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1235)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1634)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
	at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:398)
	at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitVarDef(Flow.java:989)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:956)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)

解决 我这里导致此问题的原因是: 在使用RestTemplate时,用了 ParameterizedTypeReference这个类约束返回参数类型。 但具体的泛型是由结果推断出来的。 当然还有其它原因也会导致编译不通过 大概代码如下;

ResponseEntity<T> clientsResponse = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<>() {
          
   });

在IDEA的提示下,泛型类型可由声明推导,建议去掉后面的类型。 这种情况下编译是不能通过的。

需改成

ResponseEntity<T> clientsResponse = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<T>() {
          
   });

或者

ParameterizedTypeReference<T> responseType = new ParameterizedTypeReference<>() {
          
   
        };
ResponseEntity<T> clientsResponse = restTemplate.exchange(url, HttpMethod.GET, null, responseType );
经验分享 程序员 微信小程序 职场和发展