¿Qué hay de nuevo en Java 1.5?
27.7.04Para empezar, reutilizaré (y censuraré la parte que no tiene que ver con Java) un post publicado en mi blog en Abril de este año. Como Java 1.5 continúa siendo Beta, considero que su contenido aún está vigente. El post original -sin censura ;)- puede ser visto aquí.
<-- Comienzo del Post -->
Desde el año pasado, en el sitio oficial de Java se adelantaban cuáles iban a ser las nuevas características que se agregarían a la nueva versión de Java. En febrero de este año se publicó un artículo con un resumen de las nuevas características. Para esta fecha, el Beta 2 se encuentra disponible para ser descargado.
Personalmente, recibo con mucho agrado que finalmente se puedan definir tipos genéricos en Java.
Por razones académicas, en 1998 estaba evaluando los mecanismos para la definición de clases genéricas en Java. Las opciones nativas se reducían al uso de la clase Object y el uso extensivo de castings. A nivel de investigación, me tope con trabajos como Generic Java (que había sido presentado en el OOPSLA de ese año y cuyo nombre de proyecto era "Pizza") y otros trabajos que básicamente proponían extensiones no oficiales para definir clases genéricas. En esa misma época noté que Generic Java fue adoptado como un JSR por el JCP. Finalmente, cinco años después, la especificación fue aceptada y agregada a la plataforma.
Los que han utilizado el conjunto de clases que implementan Colecciones (Vector, HashTable, HashMap, Set, List, Map...) saben que esto será un gran avance, debido a que estas clases estarán disponibles ahora en versiones genéricas. El problema de fondo que había impedido la inclusión de esta nueva característica es la compatibilidad con código anterior; además de la propia implementación de un soporte en compilación (y dependiendo de la solución escogida, también en tiempo de ejecución) para tipos genéricos.
Entre el resto de características nuevas se puede citar:
- Revisión de las primitivas para concurrencia: Interesantísimo y muy útil para mí. Aún tengo que revisarlo.
- Metadata en el código: lo asocio con JavaDoc, pero aparentemente permite definir metadatos que luego pueden ser obtenidos en tiempo de ejecución mediante reflexión (no se por qué, pero me parece inspirado en todo el rollo de semantic web).
- Sintaxis simplificada del código de ciclos si se utilizan iteradores.
- Sentencias de impresión al estilo de C (sí, con macros de formateo %s, %i, ...).