LA EVOLUCIÓN DE UN DINOSAURIO
Como ocurre en la vida real, por ejemplo, con las grandes empresas, Java se ha convertido a lo largo de los años en un producto de gran tamaño, donde cualquier cambio ha de ser muy meditado por las implicaciones que pueda llevar. Así, características que aparecieron hace ya tiempo en otros lenguajes menos extendidos, han tardado en aparecer en Java. Hablamos, por ejemplo, de las Closures, las conocidas Lambdas o un API para el manejo de fechas decente: aspectos que ya se pueden encontrar en otros muchos lenguajes desde hace tiempo y que Java incorpora en la última versión, la 8.
Se suman otras muchas características en esta versión, siendo la que más ha cambiado el lenguaje desde la 5, con la aparición de las anotaciones.
Algunas de las novedades incorporadas son:
- Interfaces funcionales.
- Lambdas.
- Métodos default en interfaces.
- Streams.
- Nuevo API de fechas.
- Cambio de la zona de memoria PermGen por Metaspace, siendo esta última dinámica, por lo que serán evitables los errores de tipo. java.lang.OutOfMemoryError: PermGen.
- Motor javascript , con ECMAScript 5.1
- Perfiles compactos que permiten modularizar el API. De momento hay 3 perfiles.
- Soporte para máquinas virtuales de menos de 3Mb.
- Mejoras en el API de reflection.
- Soporte para codificación en base64.
- Convergencia entre JRockit y HotSpot.
- Mejoras en el API de JDBC, nueva versión 4.2.
DISECCIONANDO LAS NOVEDADES
Pasamos a comentar en qué consisten algunas de estas novedades, incluyendo un fragmento de código ilustrativo.
Interfaces funcionales
Se han agrupado numerosas interfaces, ya existentes, de uso común y se han definido nuevas interfaces en el paquete java.util.function; a estas, además se las ha anotado con @FunctionalInterface , para identificarlas como interfaces funcionales y poder ser empleadas en las expresiones Lambdas. Estas interfaces únicamente declaran un método abstracto.
Lambdas
Nueva sintaxis del lenguaje que facilita la escritura de las clases internas anónimas con un solo método, basadas en Interfaces Funcionales, por ejemplo, los Listener. Su idea es reflejar la inyección de métodos.
Métodos Default
Permiten definir en interfaces métodos estáticos.
Streams
Nuevo API al estilo programación funcional, que permite manejar conjuntos de datos de forma eficiente, permitiendo definir una serie de operaciones intermedias (filtros), que no se ejecutan de forma inmediata, sino cuando finalmente se invoca una operación final (cálculo).
Una de las características más importantes de los Stream, además de su lectura más cómoda (programación funcional), es que pueden ser procesados de forma paralela.
API de fechas
Nuevo API en el paquete java.time, muy similar a la librería JodaTime.
CON QUÉ NOS QUEDAMOS
Lo interesante es que, aun teniendo características más complejas de lo que viene siendo habitual, merece la pena actualizarse a Java 8, utilizando sus novedades en vuestros programas; si bien a alguno le puedan parecer inicialmente complejas, no lo son tanto y ahorrarán mucho trabajo, aportando un gran potencial en el futuro.