使用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 );