2011-01-21 12 views
13

Veo algunos de los beneficios de los cierres, por ejemplo, cómo pueden tener su lugar en la simplificación de las bibliotecas existentes y hacer que un diseño futuro sea más fácil y más eficiente.¿Cómo los cierres en Java permitirán que el diseño de API reemplace el diseño del lenguaje?

Sin embargo, uno de los puntos clave mencionados en el proyecto de propuesta (http://www.javac.info/consensus-closures-jsr.html) es en la sección 2.5, punto e:

(La especificación mejorará el idioma por)

e) permitiendo que el futuro diseño de la API reemplace el diseño del lenguaje para extender la plataforma Java.

estoy luchando para ver cómo este es el caso, sin duda el diseño del lenguaje es sólo eso - el diseño del lenguaje en sí mismo, y no puede ser sustituido por una API de Java a menos que abre todo tipo de extrañas API utilizando cierres para modificar el idioma (que dudo mucho que pase).

¿Alguien puede arrojar algo de luz sobre esto y quizás proporcionar un ejemplo de algo que requirió un cambio de idioma previamente pero, con la adición de cierres, ya no requiere ¿uno?

Respuesta

6

Las características de diseño y lenguaje de la API son definitivamente intercambiables en algunos puntos. Solo mira algo como la palabra clave sincronizada en Java. Es una palabra clave, pero podría ser implementada como una API si el lenguaje no fuera lo suficientemente detallado. Las anotaciones son otro ejemplo. A la inversa, una anotación @Stateless que hace que todos los métodos en una clase sean transaccionales, también podría haber sido una palabra clave de idioma.

Los cierres en particular facilitan la entrega de un "bloque de código" a un método, lo que podría hacer algo con eso.

Un crudo ejemplo, una para cada uno se podría hacer:

for_each(myFooList, #(Foo foo) { 
    String something = foo.getBar() + foo.getKaz(); 
    System.out.println(something); 
}); 

Tal vez no al 100% tan limpio como tener la para cada bucle apoyado directamente por la sintaxis de la lengua, pero permite que cada uno fácilmente experiencia con mejoras de lenguaje.

+0

También está mirando una de las viejas propuestas de cierre para Java, donde uno de los objetivos era tener una sintaxis que se pareciera más a Ruby (es decir, menos repetitivo en su ciclo 'for_each') que lo que están discutiendo ahora . –

6

Para cualquier persona que no haya leído el proyecto de propuesta, aquí es un poco más de detalle de la tarde en el mismo documento:

La adición de cierres simplifica la evolución de la plataforma Java. Muchas RFE de idiomas existentes en la base de datos pública de errores de Sun pueden redirigirse como solicitudes API para los métodos que reciben cierres. Muchas necesidades futuras de formularios de declaración adicionales pueden resolverse mediante la adición de métodos de biblioteca.

Cuestiones relacionadas