Eclipse ne peut pas déduire le type correct du flux java 8


Le code suivant fonctionne bien dans tous les compilateurs java en ligne, mais eclipse génère une erreur de compilateur. Est-ce un bug dans eclipse ou est-ce que je manque un paramètre quelque part? Une solution simple pour faire taire eclipse? en ligne: https://ideone.com/l0bbhz. Remarque : Ceci est un exemple simplifié pour pointer simplement le problème. Je comprends flatMap n'est pas nécessaire dans ce cas. Dans le cas réel, j'ai vraiment besoin de flatMap

package dummy;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static java.util.stream.Collectors.toList;

public class LearnJava {

    public static void main(String[] args) {
        String[] sa = {"ne", "two", "three"};
        List<String> l = Arrays.stream(sa)
                .flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase()))
                .collect(toList());
        System.out.println(l.get(0));
    }

}

Erreur dans eclipse console.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Type mismatch: cannot convert from List<Object> to List<String>

    at dummy.LearnJava.main(LearnJava.java:13)

Ma version eclipse:

Eclipse Java EEE pour les développeurs Web.

Version: Luna Service Release 2 (4.4.2) Id de construction: 20150219-0600


Update : Je suis allé avec cette solution de contournement mineure. Cela fonctionne sans refactoring majeur!

.flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase()))

À

.<String>flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase()))
Author: balki, 2016-06-09

1 answers

Le compilateur Eclipse n'est pas parfait. Parfois, vous rencontrerez des problèmes tels que this . Par exemple, il y a actuellement deux bogues ouverts liés à flatMap et à l'interférence de type - 482664 et 502158.

Si vous pensez que le code est légitime, ce qui est fortement le cas lorsque javac le compile sans problème, alors vous devez ouvrir un bogue et y publier un extrait afin de leur en faire part. Cela aide à améliorer le compilateur.

 2
Author: Gunnar, 2017-03-14 20:16:00