Was ist das äquivalent lambda-Ausdruck für das System.out::println
Stolperte ich über den folgenden Java-code, der mit einer Methode, die die Referenz für die System.out.println
class SomeClass{
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);
numbers.forEach(System.out::println);
}
}
}
Was ist das äquivalent lambda-Ausdruck für System.out::println
?
- Es ist nicht genau, funktional aber nicht 🙂
- can u plz vorschlagen, warum?
- Gut
println
ist kaum ein side-effect-free-Funktion ... ist es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Methode Referenz
System.out::println
bewertenSystem.out
erste, erstellen Sie dann das äquivalent von einem lambda-Ausdruck, welcher die erfasst den evaluierten Wert. Normalerweise würden Sie verwendeno->System.out.println(o)
um das gleiche zu erreichen wie die Methode, die Referenz, aber dieser lambda-Ausdruck wird ausgewertetSystem.out
jedes mal, wenn die Methode aufgerufen wird.So ein genaue äquivalent wäre:
wird einen Unterschied machen, wenn jemand ruft
System.setOut(…);
in-zwischen.when its declaration is first encountered
, das ist logisch für mich. Aber gibt es eine Justiz, Freiheit und Sicherheit Teil, die explizit sagt, dass dies(ich habe wirklich versucht, es zu finden... ). Wenn invocation-target ist eine Methode, könnte man erfassen, die Methode und diethis
zum Beispiel, nicht das eigentliche Objekt, die Methode gibt... soweit ich das verstanden habe. Oder habe ich das völlig falsch?First, if the method reference expression begins with an ExpressionName or a Primary, this subexpression is evaluated
Es ist :
oder noch einfacher :