Код (весна-сеть 5.1.2)
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.AUTHORIZATION, "token");
HttpEntity<Object> requestEntity = new HttpEntity<>(headers);
ResponseEntity<Object> test = restTemplate.exchange(
"https://example.com",
HttpMethod.GET,
new HttpEntity<>(headers),
new ParameterizedTypeReference<>() { // fails here
});
}
OracleJDK 1.8 (ожидаемый результат)
не может вывестиаргументы типа для org.springframework.core.ParameterizedTypeReference
причина: нельзя использовать «<>» с анонимными внутренними классами
OracleJDK 11.0.2 (не ожидаетсявыходные данные)
файл сообщения компилятора поврежден: ключ = compiler.misc.msg.bug arguments = 11.0.2, {1}, {2}, {3}, {4}, {5}, {6}, {7} java.lang.NullPointerException в jdk.compiler / com.sun.tools.javac.comp.Flow $ FlowAnalyzer.visitApply (Flow.java:1235) в jdk.compiler / com.sun.tools.javac.tree..tools.javac.comp.Flow $ BaseAnalyzer.scan (Flow.java:398) в jdk.compiler / com.sun.tools.javac.comp.Flow $ FlowAnalyzer.visitVarDef (Flow.java:989)...
Если я поменяю оператор diamond на явный тип
new ParameterizedTypeReference<>(){}
на new ParameterizedTypeReference<Object>(){}
, тогда код успешно компилируется в обоих JDK.
Это известная ошибка компилятора?