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