O que é fechamento? Deve ser incluído no Java 7. (Os closures foram discutidos para inclusão no Java 7, mas no final não foram incluídos. -Ed) Alguém pode me fornecer algumas referências confiáveis de onde eu possa aprender coisas sobre os encerramentos?
105
Um fechamento é um bloco de código que pode ser referenciado (e transmitido) com acesso às variáveis do escopo envolvente.
Desde Java 1.1, a classe interna anônima fornece esse recurso de uma maneira altamente detalhada. Eles também têm a restrição de apenas serem capazes de usar
final
(e definitivamente atribuídas) variáveis locais. (Observe que mesmofinal
as variáveis não locais estão no escopo, mas não podem ser usadas.)O Java SE 8 pretende ter uma versão mais concisa disso para interfaces de método único *, chamadas de "lambdas". Lambdas têm praticamente as mesmas restrições que classes internas anônimas, embora alguns detalhes variem aleatoriamente.
Lambdas estão sendo desenvolvidos sob o Projeto Lambda e JSR 335 .
* Originalmente, o design era mais flexível, permitindo tipos de métodos abstratos únicos (SAM). Infelizmente, o novo design é menos flexível, mas tenta justificar a permissão da implementação nas interfaces.
fonte
De acordo com Tom Hawtin
Agora estou tentando emular o exemplo de fechamento de JavaScript na Wikipedia , com uma tradução " direta " para Java, na esperança de ser útil:
Agora a parte java: Function1 é a interface "Functor" com arity 1 (um argumento). Closure é a classe que implementa a Function1, um Functor concreto que atua como função (int -> int). No método main (), apenas instanciarei foo como um objeto Closure, replicando as chamadas do exemplo de JavaScript. A classe IntBox é apenas um contêiner simples, ela se comporta como uma matriz de 1 int:
Ele imprime:
fonte
Por favor, veja esta página wiki para a definição de fechamento.
E esta página para fechamento em Java 8: http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
Veja também estas perguntas e respostas: fechamentos em Java 7
fonte
Java Closures fará parte do J2SE 8 e está previsto para ser lançado no final de 2012.
O suporte a fechamentos do Java 8 inclui o conceito de Expressões Lambda, Referência de Método, Referência de Construtor e Métodos Padrão.
Para obter mais informações e exemplos de trabalho para isso, visite: http://amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html
fonte
Sim, Closure (Lambda Expressions) é o novo recurso com a próxima versão do Java SE 8. Você pode obter mais informações sobre isso no link abaixo: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
fonte
Uma implementação de encerramento para Java 5, 6 e 7
http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html
Ele contém tudo o que se poderia pedir ...
fonte