¿Qué hay de nuevo en Java 1.5?
Desde hace una semana ví esta iniciativa iniciada por Igvir hace tiempo y ahora retomada. Ayer me contactó para invitarme a colaborar, cosa que haré con mucho gusto.
Para 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:
Para 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, ...).
Si no estoy medio dormido por el sueño, creo que no mencionaste sobre autoboxing, que es la capacidad de mutar automáticamente por el compilador tipos primitivos como int a Integer, etc.
De http://www.javalobby.org/thread.jspa?threadID=13257&tstart=0 tomo la idea de que vamos a tener que acostumbrarnos a un nuevo estilo de bug:
Integer i = new Integer(2);
Integer j = new Integer(2);
assertTrue(i >= j); // satisfactorio
assertTrue(i <= j); // satisfactorio
assertTrue(i == j); // fallo!
Cuando un número i que es mayor o igual j y además en menor igual que j, no es igual a j?
Todo se debe a que i == j compara dos objetos no datos primitivos, pero en las dos condiciones anteriores se ha hecho autoboxing. Más de un bug extraño vamos a conseguir por este detalle.
Ojalá existiera un switch para el compiler que desabilitara el autoboxing, como en java 1.4 se puede desabilitar el assert
9:38 p. m.
Mucha gente ha dicho que Java es un lenguaje academico que esto y que lo otro, la verdad yo amo a Java tal vez por lo que la mayoria de la gente lo odia, Java es un lenguaje muy metodico, de tipo muy fuerte, seguro y hasta un punto muy admirable, es un lenguaje pensado para que el programador tenga todas las oportunidades de no codificar un codigo tan "peorro" (me disculpan la expresion, pero es verdad). La mayoria de los lenguajes tienen un compilador que les permite codificar cualquier locura, Java no, captura muchas.
Con respecto a Java 1.5 o Tiger, yo no me he querido cambiar, lo veo muy distinto, muy C. Ademas esta en Beta y me parece que la version 1.4.2_05 aun tiene muchas cosas que explorar y explotar. Me interesa mas irme para los lados que hacia delante con Java, hay mucho, mucho, demasiado buen codigo para 1.4.2 como tomcat y otros de jakarta, xindice, ... (por nombrar un par).
Algo que si me gustaria cambiar es la velocidad de ejecucion bajo MS Windows y la calidad del modo grafico en linux (a veces apesta al punto que ni la herramienta policytool se puede usar). Seria bueno tener un control panel del jre que sea grafico y que definiera los modificadores "predeterminados" del comando java. Cambios que ayudaran a la aceptacion de Java por parte de los que aun no le conocen. Hay que atacar las criticas antes de que se tornen un estigma. Soy un incurable usuario linux, me he dedicado en la medida de lo posible, en vender la verdad sobre linux, hacer que la gente lo conozca y le pierda el miedo, hay que hacer lo mismo con Java.
elebis (i know u know)
» Publicar un comentario