Java 11 Local Variable Syntax for Lambda Parameters

Синтаксис локальной переменной Java 11 для лямбда-параметров

1. Вступление

Синтаксис локальной переменной для лямбда-параметров - единственная языковая функция, представленная в Java 11. В этом руководстве мы рассмотрим и воспользуемся этой новой функцией.

2. Синтаксис локальной переменной для лямбда-параметров

Одной из ключевых функций, представленных в Java 10, былаlocal variable type inference. Это позволило использоватьvar в качестве типа локальной переменной вместо фактического типа. Компилятор определил тип на основе значения, присвоенного переменной.

Однако мы не могли использовать эту функцию с лямбда-параметрами. Например, рассмотрим следующую лямбду. Здесь мы явно указываем типы параметров:

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

Мы могли бы пропустить типы параметров и переписать лямбду как:

(s1, s2) -> s1 + s2

Даже Java 8 поддерживал это. Логическим расширением этого в Java 10 будет:

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

Однако Java 10 не поддерживала это.

Java 11 решает эту проблему, поддерживая приведенный выше синтаксис. This makes the usage of var uniform in both local variables and lambda parameters.с

3. Выгода

Зачем нам использоватьvar для лямбда-параметров, если мы можем просто пропустить типы?

Одним из преимуществ единообразия является то, что модификаторы могут применяться к локальным переменным и лямбда-формалам без потери краткости. Например, общий модификатор - это аннотация типа:

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

Мы не можем использовать такие аннотации без указания типов.

4. Ограничения

Есть несколько ограничений использованияvar в лямбда-выражении.

Например, мы не можем использоватьvar для некоторых параметров и пропустить для других:

(var s1, s2) -> s1 + s2

Точно так же мы не можем смешиватьvar с явными типами:

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

Наконец, хотя мы можем пропустить скобки в лямбда-параметре с одним параметром:

s1 -> s1.toUpperCase()

мы не можем пропустить их при использованииvar:

var s1 -> s1.toUpperCase()

Все вышеперечисленные три использования приведут к ошибке компиляции.

5. Заключение

В этой быстрой статье мы рассмотрели эту замечательную новую функцию в Java 11 и увидели, как мы можем использовать синтаксис локальной переменной для лямбда-параметров.

Как обычно доступны примерыover on GitHub.