Syntaxe des variables locales Java 11 pour les paramètres Lambda

Syntaxe de variable locale Java 11 pour les paramètres Lambda

1. introduction

La syntaxe de variable locale pour les paramètres lambda est la seule fonctionnalité de langage introduite dans Java 11. Dans ce didacticiel, nous allons explorer et utiliser cette nouvelle fonctionnalité.

2. Syntaxe de variable locale pour les paramètres Lambda

L'une des principales fonctionnalités introduites dans Java 10 étaitlocal variable type inference. Il permettait d'utiliservar comme type de la variable locale au lieu du type réel. Le compilateur a déduit le type en fonction de la valeur attribuée à la variable.

Cependant, nous ne pouvions pas utiliser cette fonctionnalité avec les paramètres lambda. Par exemple, considérons le lambda suivant. Ici, nous spécifions explicitement les types de paramètres:

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

Nous pourrions ignorer les types de paramètres et réécrire le lambda comme suit:

(s1, s2) -> s1 + s2

Même Java 8 le supportait. L'extension logique à ceci dans Java 10 serait:

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

Cependant, Java 10 ne le supportait pas.

Java 11 résout ce problème en prenant en charge la syntaxe ci-dessus. This makes the usage of var uniform in both local variables and lambda parameters.

3. Avantage

Pourquoi voudrions-nous utiliservar pour les paramètres lambda alors que nous pourrions simplement ignorer les types?

L'un des avantages de l'uniformité est que les modificateurs peuvent être appliqués aux variables locales et aux formals lambda sans perdre de leur brièveté. Par exemple, un modificateur commun est une annotation de type:

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

Nous ne pouvons pas utiliser de telles annotations sans spécifier les types.

4. Limites

Il existe quelques limitations à l'utilisation devar dans lambda.

Par exemple, nous ne pouvons pas utiliservar pour certains paramètres et sauter pour d'autres:

(var s1, s2) -> s1 + s2

De même, nous ne pouvons pas mélangervar avec des types explicites:

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

Enfin, même si nous pouvons ignorer les parenthèses dans le paramètre unique lambda:

s1 -> s1.toUpperCase()

nous ne pouvons pas les ignorer en utilisantvar:

var s1 -> s1.toUpperCase()

Toutes les trois utilisations ci-dessus entraîneront une erreur de compilation.

5. Conclusion

Dans cet article rapide, nous avons exploré cette nouvelle fonctionnalité intéressante de Java 11 et vu comment utiliser la syntaxe de variable locale pour les paramètres lambda.

Comme d'habitude, les exemples sont disponiblesover on GitHub.