Общий синтаксис объявления замыкания таков:
#(список_параметров){тело_замыкания}
# в нём означает лямбда-функцию.
Вызов этой функции осуществляется привычным в контексте классов и методов оператором «.» :
#(список_параметров){тело_замыкания}.(список_передаваемых_параметров)
Для переменных, способных хранить замыкания (лямбда-выражения), предусмотрен и соответствующий синтаксис, позволяющий Java проверять тип возвращаемого замыканием значения:
#тип_возвращаемого_значения() имя = #(список_параметров){тело_замыкания} ;
Например (подробные примеры есть в тестах):
#(){3} или во втором варианте #(){return 3;} – лямбда-функция, подставляющая вместо своего вызова значение 3, соответственно после исполнения этих двух строк:
int Val1 = #(){3}.() ;
и
int Val2 =#(){ return 3; } ;
значения Val1 и Val2 будут равны 3.
И так далее (речь идёт о параметрах), ничего страшного в этом синтаксисе я лично не вижу, он вполне вменяемый.
О поддержке механизма лямбда-исчисления можно почитать в этой ветке, я нагружать деталями не буду.
Ну что же, это весьма неплохо. Особенно если учесть тот факт, что в Java 7 замыкания ещё не так давно не ожидались.