code (Spring-web 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 (Sortie attendue)
impossible de déduire des arguments de type pour org.springframework.core.parametézedTypeRefence
raison: ne peut pas utiliser '<>' avec des classes intérieures anonymes
Oraclejdk 11.0.2 (non attendu attendu)
fichier de message compilateur cassé: Key = compiler.misc.msg.bug arguments = 11.0.2, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {7} Java.lang .NullpointException sur jdk.compiler/com.sun.tools.javac.comp.flow $ flowanalyzer.VisitaLApply (flow.java:1235) sur jdk.compiler/com.sun.tools.javac.tree.jctree $ JCMethodinvocation.accept ( Jctree.java:1634) at jdk.compiler/com.sun.tools.javac.tree.troescanner.scan (arbrescanner.java:49) sur jdk.compiler/com.sun.tools.javac.comp.flow $ basseanalyzer. Scan (flow.java:398) sur jdk.compiler/com.sun.tools.javac.comp.flow $ flowanalyzer.visitvardef (flow.java:989)
...
Si je change d'opérateur de diamant au type explicite
new ParameterizedTypeReference<>(){}
à new ParameterizedTypeReference<Object>(){}
ensuite, le code compile avec succès sur les deux JDK.
Est-ce un bug de compilateur connu?
Java 11.0.7 a le même problème.
Cela a changé de:
new ParameterizedTypeReference<>() {
})
pour ça:
new ParameterizedTypeReference<HashMap<String, MyClass>>() {
})
J'ai corrigé ce problème sur ma machine en mettant à niveau pour adoptopenjdk 11.0.8.
J'utilisais Maven: 3.6.0-JDk-11 en tant qu'image de base pour construire mon image Docker et avoir la même erreur lors du package MVN, la mise à niveau vers Maven: 3.6.3-JDK-11 corrigé pour moi.