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 .