:: (doppelter Doppelpunkt) operator in Java 8

Ich erforschen, wurde die Java-8-Quelle und fand diese Besondere Teil des Codes sehr überraschend:

//defined in IntPipeline.java
@Override
public final OptionalInt reduce(IntBinaryOperator op) {
    return evaluate(ReduceOps.makeInt(op));
}

@Override
public final OptionalInt max() {
    return reduce(Math::max); //this is the gotcha line
}

//defined in Math.java
public static int max(int a, int b) {
    return (a >= b) ? a : b;
}

Ist Math::max so etwas wie eine Methode, die Zeiger? Wie sieht ein normaler static - Methode konvertiert werden, um IntBinaryOperator?

Es ist syntaktischer Zucker, um die compiler-automatische Generierung von interface-Implementierungen basiert auf der Funktion, die Sie (, um die ganze lambda-Ding einfacher zu verwenden mit den bestehenden code-Basen).
java.dzone.com/articles/java-lambda-expressions-vs helfen könnte, schaue nicht zu tief in das Thema
es ist nicht genau "syntaktischen Zucker", es sei denn, Sie können sagen, was. d.h. "x ist syntaktischer Zucker für y".
es erzeugt ein neues Objekt der lambda jedes mal ich es verwenden. TestingLambda$$Lambda$2/8460669 und TestingLambda$$Lambda$3/11043253 erstellt wurden, auf zwei Anrufungen.
Lambdas und Methode Verweise sind nicht "plain old anonyme innere Klassen". Siehe programmers.stackexchange.com/a/181743/59134 . Ja, falls notwendig, neue Klassen und Instanzen erstellt werden on-the-fly, wenn nötig, aber nur, wenn nötig.

InformationsquelleAutor Narendra Pathai | 2013-11-15

Schreibe einen Kommentar