var in Lambdas

var in Lambdas

miniJUG

В лямбдах можно будет использовать var.

В Java 10 появится локальный вывод типов, который позволит не указывать типы локальных переменных, разрешив заменить их ключевым словом var. Недавно вышел новый JEP-323, который предлагает распространить область применения var также на параметры лямбда-выражений. Если раньше можно было писать (x, y) → x + y или (int x, int y) → x + y, то сейчас будет доступна третья форма (var x, var y) → x + y. То есть неявно типизированную лямбду можно будет писать двумя способами: с var и без var. Обе они будут логически эквивалентными.

На новую форму будет наложены следующие ограничения:

Нельзя использовать форму с var без скобок: var x → x.foo()

Нельзя смешивать в одной лямбде параметры с var и без var: (var x, y) → x + y

Нельзя смешивать в одной лямбде параметры с var и типизированные параметры: (var x, int y) → x + y


Может возникнуть вопрос: если всегда можно использовать форму без var, то какой смысл использовать форму с var? На самом деле, вторая форма иногда может быть полезной. Например, она может пригодиться, когда нужно указать модификатор final или наложить аннотацию на параметр:

(final var x) → x + 1;

(@Nonnull var x) → x + 1;

На текущий момент неизвестно, попадёт ли JEP-323 в Java 10.

Обсудить новость

Подписаться на канал в Telegram


Report Page