2012-02-13 6 views
5

¿Qué pasa con la clase interna existente, por qué la clase interna no se puede usar para representar el cierre?Presentamos cierres de JDK 1.8 - Proyecto Lambda

Actualmente voy a publicar aquí algunos recursos para comenzar con.

En primer lugar, a continuación se muestra una gran visión general de lo que es el cierre. Es un lenguaje agnóstico. Recomiendo leerlo Cierre http://martinfowler.com/bliki/Closure.html

añadido un poco más tarde

[enero de 2007] Una definición de cierres http://gafter.blogspot.com/2007/01/definition-of-closures.html

FIN

[diciembre de 2011] Estado de la Lambda http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

[octubre de 2007] Temas Avanzados en lenguajes de programación: Cierres para Java http://www.youtube.com/watch?v=0zVizaCOhME

[4 de enero de, 2011] JSR 292 bondad: Lambda a la conversión del tipo SAM utilizando invokedynamic http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic

+0

Este no es un lugar para hacer tales preguntas generales, O para publicar información general. SO tiene un conjunto de pautas muy específicas, y su publicación infringe varias de ellas. Por favor, lea el [faq] y [preguntar]. –

+0

Mire en http://stackoverflow.com/questions/36636/what-is-a-closure esta es una pregunta mucho más general. – alexsmail

+1

@JimGarrison, reduzco el alcance de la consulta. Espero que ahora esté bien. – alexsmail

Respuesta

0

clases internas se pueden utilizar para hacer muchas de las cosas cierres pueden hacer para ti.

Los cierres tienen dos ventajas principales, son más simples y más concisos, lo que significa que es más probable que se usen. El lenguaje los comprende mejor y se pueden optimizar de maneras que las clases internas no lo son. p.ej. mejor manejo de excepciones específicas, manejo de primitivas.

Los cierres se pueden utilizar para construir otros métodos de primera clase, p. vía currying. No estoy seguro de si esto es una gran ventaja, pero definitivamente no es una opción simple con clases anidadas.

+0

Pensé que eran simplemente azúcar sintáctica alrededor de las clases internas (bueno, y algo de retrabajo para el sistema tipo), es decir, todas las mismas limitaciones que tenemos con ellas todavía se aplican. – Voo

+0

Consulte el enlace http://weblogs.java.net/blog/forax/archive/2011/01/04/jsr-292-goodness-lambda-sam-type-conversion-using-invokedynamic anterior.La sugerencia actual _implementation_ de cierres en Java es usar clase interna y no MethodHandle. – alexsmail

+0

@Voo Si comienzas a leer los foros verás que hay muchas personas que dicen que es un cambio en el lenguaje y no azúcar sintáctica como tú y yo lo vemos. Mira http://www.youtube.com/watch?v=0zVizaCOhME el enlace de arriba, por ejemplo. – alexsmail

3

Como ya lo he entendido, el plan para el cierre en Java 8 es sólo para que sea menos de un dolor que las soluciones actuales con las clases internas - porque en serio, la sintaxis clase interna es una enorme sobrecarga sintáctica para escribir lambdas simples

+0

Entonces, ¿solo se trata de "azúcar sintáctico"? :-) – alexsmail

+0

Pensé que sí. ¿Lo es? –

+1

Eso es lo que pensé. Hasta que encontré 'MethodHandle'. Y cambiando la implementación del cierre y la fuerza. Ahora estoy confundido. – alexsmail