Ich weiß, dass die Java-8-Lambda-Implementierung Änderungen unterliegt, aber in Lambda-Build b39 habe ich festgestellt, dass geschweifte Klammern nur weggelassen werden können, wenn der Lambda-Ausdruck einen nicht-void-Typ zurückgibt. Zum Beispiel stellt dies:Wann sind geschweifte Klammern optional in Java 8 Lambda-Syntax?
public class Collections8 {
public static void main(String[] args) {
Iterable<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.filter(e -> e.length() > 4).forEach(e -> { System.out.println(e); });
}
}
Aber die Klammern wie folgt zu entfernen:
names.filter(e -> e.length() > 4).forEach(e -> System.out.println(e));
gibt dem Fehler
Collections8.java:6: error: method forEach in interface Iterable<T> cannot be applied to given types;
names.filter(e -> e.length() > 4).forEach(e -> System.out.println(e));
^
required: Block<? super String>
found: lambda
reason: incompatible return type void in lambda expression
where T is a type-variable:
T extends Object declared in interface Iterable
Kann mir jemand erklären, was hier los?
wenn es noch in der Entwicklung und Änderungen vorbehalten ist, warum sogar fragen? Die Antwort könnte sofort veraltet sein. – user12345613
Weil ich gerne die Gründe dahinter verstehen würde. – hertzsprung
Woher bekommen Sie die Filtermethode? Ich habe Java 8 Lambda Versin, und Jahr Code kompiliert nicht. – NimChimpsky