É um dos recursos mais comentados planejados para Java: Encerramentos. Muitos de nós ansiamos por eles. Alguns de nós (inclusive eu) ficamos um pouco impacientes e recorremos a linguagens de script para preencher o vazio.
Porém, quando os fechamentos finalmente chegarem ao Java: como eles afetarão a Comunidade Java? O avanço das linguagens de script direcionadas à VM fica lento para um rastreamento, permanece o mesmo ou entra em colapso? As pessoas vão adotar a nova sintaxe de fechamento, transformando assim as bases de código Java em implementações mais estruturadas funcionalmente? Veremos apenas fechamentos espalhados em Java por toda parte? Qual será o efeito no suporte à ferramenta / IDE? E quanto ao desempenho? E, finalmente, o que significa para a adoção contínua do Java, como linguagem, em comparação com outras linguagens que estão crescendo em popularidade?
Para fornecer um exemplo de uma das mais recentes especificações de sintaxe do Java Closure propostas:
public interface StringOperation {
String invoke(String s);
}
// ...
(new StringOperation() {
public invoke(String s) {
new StringBuilder(s).reverse().toString();
}
}).invoke("abcd");
se tornaria ...
String reversed = {
String s =>
new StringBuilder(s).reverse().toString()
}.invoke("abcd");
[fonte: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]
Respostas:
Acho que levará algum tempo para muitos desenvolvedores Java "comuns" entenderem esse conceito, se ainda não estiverem familiarizados com ele, mas gradualmente ele será facilitado no uso regular de Java, para nosso benefício. Seria ótimo se ele fosse adotado tão rapidamente quanto os genéricos quando o Java 5 chegasse.
Eu imagino que isso não afetará as linguagens de script direcionadas à VM tanto quanto é apenas uma vantagem de usar aquelas que a possuem.
fonte
Existe um ciclo usual que acompanha qualquer nova ferramenta brilhante:
Tudo isso leva alguns anos para percorrer. Isso aconteceu com anotações e genéricos, e também com fechamentos.
Impacto nas pessoas da linguagem de script:
fonte
Aqueles que gostam de programação multiencadeada poderão incorporar estruturas de dados imutáveis em Java e manipulá-las de uma maneira mais semelhante ao ceceio, sem a necessidade de recorrer a não-sequenciadores devido à incompatibilidade de impedância de linguagem entre Java e Lisp.
Aqueles que não usarem (ou entenderem) nenhuma das opções acima serão capazes de fazer as coisas como antes.
fonte
Eu suspeito que as pessoas familiarizadas com os fechamentos começarão a usá-los no código do aplicativo. Eles os evitarão nas bibliotecas por um tempo para manter a compatibilidade com versões anteriores do Java.
Programadores que não estão familiarizados com fechamentos de outras linguagens demoram a adotá-los em Java.
Os genéricos foram adotados rapidamente quando foram introduzidos ao Java parcialmente devido a todos os avisos que apareceram quando você atualizou e por causa de sua incorporação no SDK. Isso não será verdade com os fechamentos. Será mais difícil encontrar evidências de sua existência; portanto, somente quem quiser usá-los os usará.
Não acho que o desenvolvimento de outras linguagens de script da JVM pare. Esses idiomas têm impulso e muitos recursos, além de fechamentos. No entanto, podemos ver menos novos idiomas da JVM, pois o fechamento foi o principal impulso para a criação de novos idiomas da JVM.
fonte