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

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2020