Java 11 Lokale Variablensyntax für Lambda-Parameter

Java 11-Syntax lokaler Variablen für Lambda-Parameter

1. Einführung

Die Syntax der lokalen Variablen für Lambda-Parameter ist die einzige in Java 11 eingeführte Sprachfunktion. In diesem Tutorial werden wir diese neue Funktion untersuchen und verwenden.

2. Lokale Variablensyntax für Lambda-Parameter

Eine der wichtigsten Funktionen, die in Java 10 eingeführt wurden, warlocal variable type inference. Es erlaubte die Verwendung vonvar als Typ der lokalen Variablen anstelle des tatsächlichen Typs. Der Compiler hat den Typ basierend auf dem der Variablen zugewiesenen Wert abgeleitet.

Wir konnten diese Funktion jedoch nicht mit Lambda-Parametern verwenden. Betrachten Sie beispielsweise das folgende Lambda. Hier spezifizieren wir explizit die Typen der Parameter:

(String s1, String s2) -> s1 + s2

Wir könnten die Parametertypen überspringen und das Lambda wie folgt umschreiben:

(s1, s2) -> s1 + s2

Sogar Java 8 hat dies unterstützt. Die logische Erweiterung dazu in Java 10 wäre:

(var s1, var s2) -> s1 + s2

Java 10 hat dies jedoch nicht unterstützt.

Java 11 behebt dies, indem es die obige Syntax unterstützt. This makes the usage of var uniform in both local variables and lambda parameters.

3. Vorteil

Warum sollten wirvar für Lambda-Parameter verwenden wollen, wenn wir die Typen einfach überspringen könnten?

Ein Vorteil der Einheitlichkeit besteht darin, dass Modifikatoren auf lokale Variablen und Lambda-Formale angewendet werden können, ohne an Kürze zu verlieren. Ein gängiger Modifikator ist beispielsweise eine Typanmerkung:

(@Nonnull var s1, @Nullable var s2) -> s1 + s2

Wir können solche Anmerkungen nicht verwenden, ohne die Typen anzugeben.

4. Einschränkungen

Es gibt einige Einschränkungen bei der Verwendung vonvar in Lambda.

Zum Beispiel können wirvar für einige Parameter nicht verwenden und für andere überspringen:

(var s1, s2) -> s1 + s2

Ebenso können wirvar nicht mit expliziten Typen mischen:

(var s1, String s2) -> s1 + s2

Schließlich, obwohl wir die Klammern im einzelnen Parameter Lambda überspringen können:

s1 -> s1.toUpperCase()

Wir können sie nicht überspringen, wenn wirvar verwenden:

var s1 -> s1.toUpperCase()

Alle drei oben genannten Verwendungen führen zu Kompilierungsfehlern.

5. Fazit

In diesem kurzen Artikel haben wir diese coole neue Funktion in Java 11 untersucht und gesehen, wie wir die Syntax lokaler Variablen für Lambda-Parameter verwenden können.

Wie üblich sind die Beispiele inover on GitHub verfügbar.