В 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.