2016-06-09 54 views
10

Il seguente codice funziona bene in tutti i compilatori java in linea, ma eclissi genera errore del compilatore. È un bug in eclissi o mi mancano alcune impostazioni da qualche parte? Una semplice soluzione per silenziare eclissi? online: https://ideone.com/l0bbhz. Nota: questo è un esempio semplificato semplificato per indicare solo il problema. Capisco che flatMap non è necessario in questo caso. Nel caso concreto, ho davvero bisogno flatMapEclipse non può inferire il tipo corretto dal flusso java 8

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)); 
    } 

} 

Errore nella console Eclipse.

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) 

La mia versione di Eclipse:

Eclipse IDE Java EE per gli sviluppatori web.

Versione: Luna Service Release 2 (4.4.2) Corporatura ID: 20150219-0600


Aggiornamento: Sono andato con questa soluzione minore. Funziona senza importanti refactoring!

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

Per

.<String>flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase())) 
+0

Non so quale tipo di eclissi si sta utilizzando ma tutto funziona con me qui su eclipse Neon. Penso che potresti avere alcune impostazioni –

+1

Eclipse non usa il compilatore Java standard fornito con Oracle JDK; sembra che il compilatore di Eclipse abbia avuto [alcuni tipi di problemi di inferenza] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=434483) in passato, quindi assicurati di utilizzare un aggiornamento versione – oldrinb

+3

Posso confermare questo comportamento. Sto usando Eclipse Mars.2 e JDK 1.8.0_92. – Turing85

risposta

1

Eclipse compilatore non è perfetto. A volte si riscontrano problemi come this. Ad esempio, al momento sono disponibili due bug relativi a flatMap e tipo di interferenza - 482664 e 502158.

Se ritieni che il codice sia valido, il che è vero nel caso in cui javac lo compili senza problemi, dovresti aprire un bug e inserire uno snippet lì per farglielo sapere. Questo aiuta a migliorare il compilatore.

+0

Quasi un anno dopo, ciò si traduce in "Aggiornamento di Eclipse!" – Stewart