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()))
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.