Рубрики
Без рубрики

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

Узнайте, как использовать синтаксис var с лямбда-выражениями в Java 11

Автор оригинала: Ganesh Pagade.

1. введение

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

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

Одной из ключевых функций, введенных в Java 10, был вывод типа локальной переменной . Это позволило использовать 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 решает эту проблему, поддерживая приведенный выше синтаксис. Это делает использование var равномерным как в локальных переменных, так и в лямбда-параметрах.

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 и увидели, как мы можем использовать синтаксис локальных переменных для параметров лямбда.

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