2016-01-14 13 views
5

Ich versuche, diese zu konvertieren:Java 8 Generika und Typinferenz Ausgabe

static Set<String> methodSet(Class<?> type) { 
    Set<String> result = new TreeSet<>(); 
    for(Method m : type.getMethods()) 
     result.add(m.getName()); 
    return result; 
} 

Welche gerade fein kompiliert, um die moderne Java 8 Streams Version:

static Set<String> methodSet2(Class<?> type) { 
    return Arrays.stream(type.getMethods()) 
     .collect(Collectors.toCollection(TreeSet::new)); 
} 

, die einen Fehler erzeugt Nachricht:

Ich kann sehen, warum der Compiler Probleme damit haben würde --- nicht genug Art Informationen, um herauszufinden, ich Schlussfolgerung. Was ich nicht sehen kann, ist, wie ich es beheben kann. Weiß jemand?

Antwort

11

Die Fehlermeldung ist nicht besonders klar, aber das Problem ist, dass Sie nicht den Namen der Methoden, sondern die Methoden selbst sammeln.

Anders ausgedrückt, sind Sie die Zuordnung vom Method zu seinem Namen:

static Set<String> methodSet2(Class<?> type) { 
    return Arrays.stream(type.getMethods()) 
       .map(Method::getName) // <-- maps a method to its name 
       .collect(Collectors.toCollection(TreeSet::new)); 
} 
+0

Sorry dafür fehlt und danke für den Hinweis auf. – user1677663