[quote=clone_zealot]Uma ajuda:
closure seria o que eu, carinhosamente, chamo de inner-function?
Nunca consegui enviar na cabeça o que é isso… sempre que vejo essa palavra fico em dúvida, dai consulto a wikipedia, e ela só reforça a minha idéia de inner-function
Definição de inner-function: objeto que, em tempo de compilação, pode ser tratado como um objeto qualquer, e que possui um ‘invoke’ implícito, que recebe n parâmetros.[/quote]
O que a propost tràs à mesa é mais que closures. É first class methods. Ou seja, trabalhar com métodos como sendo objetos. Básicamente isso já existe em java.reflect.Method. O que a proposta trás é uma forma simples de extrair uma referencia ao método sem usar reflection diretamente.
Se os métodos são cidadãos de primeira classe eles têm que ter literais. O literal de um método é a assinatura e o corpo.
Mas se ha um literal e ha um cidadão de primeira classe ha uma forma de declarar variáveis desse tipo. Se temos tudo isto podemos declarar métodos em qualquer lugar e isso é que se caracteriza como a sintaxe de closure porque ao declarar um literal o método verdadeiro que será criado dai, terá que ter um escopo e esse escopo segue as regras de closure.
Isto, obviamente , torna qualquer método em qualquer classe uma possivel closure. E torna possivel criar métodos do nada (anonimos).
O passo seguinte é apenas açucar sintático: se uma classe abstrata ou interface têm apenas um método, uma classe concreta pode ser criada simplesmente dizendo qual é a implementação desse método. Com objetos-método isto é trivial e portanto é suportado passar objetos-metodo onde este tipo de interfae seria esperado. Especialmente util para Runnnable e Callable e em Listeners.
Como qualquer objeto-metodo pode ser convertido para um objeto Method do reflection então ele têm implicitamente um método invoke que recebe parametros. Portanto ele é, pela definição que citou, uma inner-function.
A adição de closures faz valer a pena a espera. E já faz pensar na nova vaga de frameworks web que irão correr no JEE 6 com Servlet API 3 (que tem um monte de coisas boas).