web-dev-qa-db-fra.com

Impossible de déduire des arguments de type pour la carte <R> (fonction <? Super T,? Étend R>) dans certaines situations spécifiques

J'ai les classes suivantes dans un fichier Sandbox.Java:

package sandbox;

import Java.util.Arrays;
import Java.util.Collection;
import Java.util.concurrent.CompletableFuture;
import Java.util.concurrent.ExecutorService;
import Java.util.concurrent.Executors;
import Java.util.stream.Collectors;

public class Sandbox {

    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Collection<String> s = Arrays.asList(1,2,4,100).stream()
                .map(i -> CompletableFuture
                        .supplyAsync(() -> Wrapper.of(i), executor)
                        .thenApply(d -> d.get().toString())
                        )
                .map(CompletableFuture::join)
                .collect(Collectors.toList());

        executor.shutdown();

        System.out.println(s);
    }
}

class Wrapper<T> {
    T t;

    private Wrapper(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public static <T> Wrapper<T> of (T t) {
        return new Wrapper<>(t);
    }
}

la compilation dans Eclipse montre une erreur à la ligne 14 "Impossible de déduire le ou les arguments de type pour la carte (Fonction)".

Le même code se compile sans problème en utilisant du javac pur (JDK 1.8.0_121).

Si je change la ligne appropriée en:

Collection<String> s = Arrays.asList(1,2,4,100).stream()
                .map(i -> CompletableFuture
                        .supplyAsync(() -> Wrapper.of(i), executor)
                        .<String>thenApply(d -> d.get().toString())
                        )
                .map(CompletableFuture::join)
                .collect(Collectors.toList());

puis le code se compile sans erreur dans Eclipse.

Est-ce que quelqu'un sait pourquoi existe-t-il un tel comportement? Est-ce un bug?

J'utilise Eclipse 4.6.2.20161208-0625 (il ne trouve aucune mise à jour pour le moment).

10
Przemysław Różycki

J'ai confirmé qu'il s'agit d'un bug: https://bugs.Eclipse.org/bugs/show_bug.cgi?id=512486 . Il a été déclaré résolu au 4.6.3. Je le confirmerai quand une version stable sera disponible.

6

Je viens de vérifier avec Eclipse IDE for Java Developers Version: Mars Release (4.5.0) Build id: 20150621-1200 et le code a bien fonctionné pour moi. Il peut avoir été introduit dans la version 4.6.

3
Pallavi Sonal