2016-05-21 34 views
16

Per favore, qualcuno potrebbe aiutarmi a capire perché il seguente codice viene compilato con jdk8u45 e sopra ma non riesce con jdk8u25? Ho controllato le note di rilascio di JDK ma non ho trovato nulla relativo al problema o forse l'ho perso.Perché questo codice viene compilato con jdk8u45 e sopra ma non con jdk8u25?

Il codice

public class Main { 

    static class Param { 
     final int id; 

     Param(int id) { 
      this.id = id; 
     } 
    } 

    static class Subtask { 
     final Param param; 

     Subtask(Param param) { 
      this.param = param; 
     } 
    } 

    public static void main(String[] args) { 
     List<? extends Param> params = IntStream.range(1, 100).mapToObj(Param::new).collect(Collectors.toList()); 
     NavigableMap<String, Subtask> map = params.stream() 
       .collect(Collectors.toMap(p -> UUID.randomUUID().toString(), Subtask::new, (a, b) -> a, TreeMap::new)); 
    } 
} 

jdk8u25 eccezione:

Error:(33, 17) java: no suitable method found for collect(java.util.stream.Collector<org.ka.Main.Param,capture#1 of ?,java.util.TreeMap<java.lang.String,org.ka.Main.Subtask>>) 
    method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super capture#2 of ? extends org.ka.Main.Param>,java.util.function.BiConsumer<R,R>) is not applicable 
     (cannot infer type-variable(s) R 
     (actual and formal argument lists differ in length)) 
    method java.util.stream.Stream.<R,A>collect(java.util.stream.Collector<? super capture#2 of ? extends org.ka.Main.Param,A,R>) is not applicable 
     (cannot infer type-variable(s) R,A,capture#3 of ?,T,K,U,M,K,V 
     (argument mismatch; java.util.stream.Collector<capture#2 of ? extends org.ka.Main.Param,capture#4 of ?,java.util.TreeMap<java.lang.Object,org.ka.Main.Subtask>> cannot be converted to java.util.stream.Collector<? super capture#2 of ? extends org.ka.Main.Param,capture#4 of ?,java.util.TreeMap<java.lang.Object,org.ka.Main.Subtask>>)) 
+3

Probabilmente un bug in 8u25. L'errore non ha molto senso per me. (Penso che la discrepanza tra argomenti sia errata e ha anche dedotto 'TreeMap ' per qualche ragione.) – Radiodef

+0

Si tratta di Oracle JDK? – Andremoniy

+0

@Andremoniy yes –

risposta