Sintaxe da variável local Java 11 para parâmetros Lambda

Sintaxe da variável local Java 11 para parâmetros Lambda

1. Introdução

A sintaxe da variável local para os parâmetros lambda é o único recurso de idioma introduzido no Java 11. Neste tutorial, vamos explorar e usar esse novo recurso.

2. Sintaxe de variável local para parâmetros Lambda

Um dos principais recursos introduzidos no Java 10 foilocal variable type inference. Ele permitiu o uso devar como o tipo da variável local em vez do tipo real. O compilador inferiu o tipo com base no valor atribuído à variável.

No entanto, não foi possível usar esse recurso com parâmetros lambda. Por exemplo, considere o seguinte lambda. Aqui especificamos explicitamente os tipos dos parâmetros:

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

Podemos pular os tipos de parâmetros e reescrever o lambda como:

(s1, s2) -> s1 + s2

Até o Java 8 suportava isso. A extensão lógica para isso no Java 10 seria:

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

No entanto, o Java 10 não suporta isso.

O Java 11 resolve isso suportando a sintaxe acima. This makes the usage of var uniform in both local variables and lambda parameters.

3. Benefício

Por que desejaríamos usarvar para parâmetros lambda quando poderíamos simplesmente pular os tipos?

Um benefício da uniformidade é que modificadores podem ser aplicados a variáveis ​​locais e formais lambda sem perder a brevidade. Por exemplo, um modificador comum é uma anotação de tipo:

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

Não podemos usar essas anotações sem especificar os tipos.

4. Limitações

Existem algumas limitações no uso devar em lambda.

Por exemplo, não podemos usarvar para alguns parâmetros e pular para outros:

(var s1, s2) -> s1 + s2

Da mesma forma, não podemos misturarvar com tipos explícitos:

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

Finalmente, mesmo que possamos pular os parênteses no único parâmetro lambda:

s1 -> s1.toUpperCase()

não podemos ignorá-los enquanto usamosvar:

var s1 -> s1.toUpperCase()

Todos os três usos acima resultarão em erro de compilação.

5. Conclusão

Neste artigo rápido, exploramos esse novo recurso interessante no Java 11 e vimos como podemos usar a sintaxe da variável local para parâmetros lambda.

Como de costume, os exemplos estão disponíveisover on GitHub.