web-dev-qa-db-fra.com

JDK 11.0.2 Compilation échoue avec Javac NPE sur l'inférence de type de classe paramétré anonyme

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?

33
Mikhail Kholodkov

Java 11.0.7 a le même problème.

Cela a changé de:

new ParameterizedTypeReference<>() {
})

pour ça:

new ParameterizedTypeReference<HashMap<String, MyClass>>() {
})
1
Martin Langvatn

J'ai corrigé ce problème sur ma machine en mettant à niveau pour adoptopenjdk 11.0.8.

https://adoptopenjdk.net/installation.html#x64_mac-jdk

1
bogdancep

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.

0
ExploreEv