¿Qué es el cierre? Se supone que está incluido en Java 7. (Se discutió la inclusión de cierres en Java 7, pero al final no se incluyeron. -Ed) ¿Alguien puede proporcionarme algunas referencias fiables de las que pueda aprender cosas sobre cierres?
105
Un cierre es un bloque de código al que se puede hacer referencia (y pasar) con acceso a las variables del ámbito adjunto.
Desde Java 1.1, la clase interna anónima ha proporcionado esta función de una manera muy detallada. También tienen la restricción de poder usar solo
final
variables locales (y definitivamente asignadas). (Tenga en cuenta que inclusofinal
las variables no locales están dentro del alcance, pero no se pueden usar).Java SE 8 está destinado a tener una versión más concisa de esto para interfaces de método único *, llamadas "lambdas". Las lambdas tienen las mismas restricciones que las clases internas anónimas, aunque algunos detalles varían aleatoriamente.
Las lambdas se están desarrollando en el marco del Proyecto Lambda y JSR 335 .
* Originalmente, el diseño era más flexible y permitía tipos de métodos abstractos únicos (SAM). Desafortunadamente, el nuevo diseño es menos flexible, pero intenta justificar la implementación dentro de las interfaces.
fuente
Según Tom Hawtin
Ahora estoy tratando de emular el ejemplo de cierre de JavaScript en Wikipedia , con una traducción " directa " a Java, con la esperanza de que sea útil:
Ahora la parte de Java: Function1 es la interfaz "Functor" con arity 1 (un argumento). Closure es la clase que implementa Function1, un Functor concreto que actúa como función (int -> int). En el método main (), simplemente instancia foo como un objeto Closure, replicando las llamadas del ejemplo de JavaScript. La clase IntBox es solo un contenedor simple, se comporta como una matriz de 1 int:
Imprime:
fuente
Consulte esta página wiki para ver la definición de cierre.
Y esta página para el cierre en Java 8: http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
También mire estas preguntas y respuestas: cierres en Java 7
fuente
Java Closures formará parte de J2SE 8 y está previsto que se publique a finales de 2012.
El soporte de cierres de Java 8 incluye el concepto de expresiones Lambda, referencia de método, referencia de constructor y métodos predeterminados.
Para obtener más información y ejemplos prácticos para esto, visite: http://amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html
fuente
Sí, Closure (Lambda Expressions) es la nueva característica de la próxima versión de Java SE 8. Puede obtener más información sobre esto en el siguiente enlace: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
fuente
Una implementación de cierre para Java 5, 6 y 7
http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html
Contiene todo lo que uno podría pedir ...
fuente