А вот и первые кандидаты на замыкания в Java 7

31 май, 2010 - 13:15Андрей Зубинский

Давеча (а именно, 27.05.2010) Oracle опубликовала первые два варианта реализации замыканий (closure) в Java 7. Отличия между вариантами синтаксические и, можно сказать, минимальные – по сути, наличием двух вариантов рассматривается необходимость в операторе return в теле функции-замыкания.

Общий синтаксис объявления замыкания таков:

#(список_параметров){тело_замыкания}

# в нём означает лямбда-функцию.

Вызов этой функции осуществляется привычным в контексте классов и методов оператором «.» :

#(список_параметров){тело_замыкания}.(список_передаваемых_параметров)

Для переменных, способных хранить замыкания (лямбда-выражения), предусмотрен и соответствующий синтаксис, позволяющий Java проверять тип возвращаемого замыканием значения:

#тип_возвращаемого_значения() имя = #(список_параметров){тело_замыкания} ;

Например (подробные примеры есть в тестах):

#(){3} или во втором варианте #(){return 3;} – лямбда-функция, подставляющая вместо своего вызова значение 3, соответственно после исполнения этих двух строк:

int Val1 = #(){3}.() ;

и

int Val2 =#(){ return 3; } ;

значения Val1 и Val2 будут равны 3.

И так далее (речь идёт о параметрах), ничего страшного в этом синтаксисе я лично не вижу, он вполне вменяемый.

О поддержке механизма лямбда-исчисления можно почитать в этой ветке, я нагружать деталями не буду.

Ну что же, это весьма неплохо. Особенно если учесть тот факт, что в Java 7 замыкания ещё не так давно не ожидались.