Lo nuevo del Java 5

El 23 de mayo de 1995, la empresa Sun Microsystems anunció el lanzamiento de la tecnología Java. Desde ese entonces hemos visto cómo la plataforma Java ha ido evolucionando desde aplicaciones simples de escritorio y aplicaciones Web, hasta aplicaciones empresariales distribuidas. Ahora, en este cuarto trimestre del 2004, la última versión del Java Standard Edition Platform (conocido como “tiger project”) ha sido liberada como Java 5.

Características del Java 5

El principal objetivo de esta versión JDK 5 es la facilidad de desarrollo con las nuevas características como tipos de datos genéricos, el loop for-each, autoboxing/unboxing, enums, varargs, static imports y anotaciones.

El JDK 5 está diseñado para hacer que los programas se estructuren de manera más ordenada, más corta y fortificando la seguridad. Además, proporciona un soporte lingüístico para idiomas comunes.

El objetivo de este artículo es entender fácilmente JDK 5, para así empezarlo a usar en nuestro desarrollo. Veamos las diferentes características de la 5.0.

Tipos genéricos, For-Each y Autoboxing/unboxing

Quizá la mejora más significante que tiene el lenguaje Java sea la introducción de los tipos genéricos. Ya no será necesario hacer castings de objetos para subir o bajar en la jerarquía de Clases.

Los tipos genéricos nos permiten especificar el tipo de elemento de un Collection en tiempo de compilación. En lugar de especificar una lista, especificamos su contenido, por ejemplo: Double.

El siguiente código usa la nueva sintaxis del For-each para iterar a través de una Lista llamada “todo” que no es más que una lista de Double. Notemos que no hay necesidad de hacer casting y el for es muy fácil de leer:

public double sumar (Collection todo) {
double total = 0;
for(Double i : todo){
total += i;
}
return total;
}

Una pregunta que se ha escuchado bastante es Porqué ":" en lugar de "in". La respuesta es que "in" ya es una palabra usada (por ejemplo, System.in) y además porque no se quiso introducir una palabra reservada más. La única palabra nueva en el JDK 5 es "enum".

Autoboxing: conversión automática de int a Integer.

Unboxing: conversión automática de Integer a int.

Por ejemplo, podemos fácilmente hacer lo siguiente:

Integer i = new Integer(5);
Map map = new HashMap();
map.put("result", i+1);

Notemos que el tipo Integer es convertido a int para la suma, y luego es vuelto a convertir a Integer cuando se introduzca al Map.

¿Cuándo usar los tipos de datos genéricos?

Toda vez que sea posible, al menos que tengamos que ejecutar nuestra aplicación en máquinas virtuales anteriores a la 5.0. Usando los tipos de datos genéricos mejoraremos la claridad en el código y evitaremos problemas con los tipos de datos.

¿Cuándo usar el For-each?

Toda vez que sea posible, porque realmente hace el código más legible. Quizás este sea el menor cambio que trae el 5.0 pero es uno de lo favoritos. Podemos usar for-each en los siguientes casos:

  • Eliminar elementos mientras recorremos un Collection.
  • Modificar la posición actual en un arreglo o lista.
  • Iterar en múltiples Collections o arrays.

¿Cuando usar autoboxing?

Cuando hay una incompatibilidad entre las tipos de referencia y los datos primitivos. Aunque esto no es apropiado para cálculos científicos. Un Integer no es un substituto para un int. El autoboxing y unboxing simplemente ocultan las diferencias entre los wrappers y los datos primitivos.

Enumerated Types (enums)

Un enumerated type es un tipo de dato que contiene un conjunto de valores constantes.

JDK 5 incluye soporte lingüístico para los tipos de datos enumerados. Las características avanzadas de la OO incluyen la capacidad de agregar los métodos y campos a los enums. Esto es más ordenado, más seguro y más potente que las alternativas existentes.

enum Season (WINTER, SPRING, SUMMER, FALL)

Enums son Comparable y Serializables. Las constantes de Enum deberían ser nombradas de manera similar que las constantes. Enums son básicamente un nuevo tipo de Clase. Hasta el momento no he usado Enums en mi código, es que todavía no pienso cómo debería usarlo. Quizás los desarrolladores de frameworks lo encontrarán útil.

¿Cuando debería usar Enums?

  • Tipos de enumerados naturales: días de la semana, fases de la luna, estaciones.
  • Otros conjuntos donde sepamos todos los valores posibles: opciones de un menú, etc.
  • Como reemplazo de los flags (EnumSet)

Static Imports

Los programadores pueden usar las variables y métodos estáticos con el nombre de la Clase (Math.PI). Para evitar eso, algunos programadores colocan las constantes en una interface y lo implementan, lo cual está mal (Constant Interface Antipattern). Ellos han cometido este error en el JDK, el java.util.jar tiene este patrón. Los Static imports permiten acceso a los miembros estáticos extendiendo el tipo. Todos los campos estáticos, métodos, etc. estarán disponibles para nuestra Clase usando los static imports. Por ejemplo:

import static java.lang.Math.*;
...
r = cos(PI * theta);

¿Cuándo debería usar los Static imports?

  • Con moderación, el empleo excesivo hace al programa inelegible.
  • Solo usarlo cuando se tienda a abusar de la herencia.

Varargs

Los Varargs son métodos que reciben un número arbitrario de argumentos que Ud. requiere para crear un arreglo. Varargs automatiza y oculta el proceso. James Gosling contribuyó con la sintaxis de los 3 puntos (...). Varargs siempre tiene que ser el último parámetro. MessageFormat.format ha sido mejorado con varargs en el JDK 5:

public static String format(String pattern, Object... arguments);

String result = MessageFormat.format("At {1,time} on {1,date}, there was {2} on planet " + "{0,number,integer}.", 7, new Date(), "a disturbance in the Force");

¿Cuándo usar Varargs?

  • Si está diseñando su propio API, se recomienda usarlo con moderación.
  • Sólo cuando el beneficio es convincente. No sobrecargue un método varargs.
  • En clientes, cuando el API los soporta: reflection, message formatting, printf.

Metadata

El Java 5 ahora soporta la inclusión de metadata relacionada a las Clases Java, interfaces, campos y métodos. Las herramientas de desarrollo son lo que usarán el soporte de esta metadata para la inserción automática de código fuente adicional, para debbug, y para la creación y modificación de archivos XML externos.

Enlaces


JAVA 5 in practice by Cedric Beust

http://www.theserverside.com/blogs/showblog.tss?id=JDK5Practice

JDK 5 from Joshua and Neal

http://www.theserverside.com/blogs/showblog.tss?id=JDK15

Contacta

   

© 2006 - Todos los derechos reservados Ciberaula -c/ Villalobos, 135 - 28018 Madrid - España - Tel. (34) 91 3035800
Aviso legal

Lo más buscado y visitado en Ciberaula

Masters: Programación Web | Diseño Web | Diseño Gráfico | Java | Flash MX | PHP | 3D Studio Max
Cursos: GNU/Linux | OpenOffice Impress | OpenOffice Writer | PHP 5 | HTML | J2EE | J2SE | Dreamweaver | Flash MX | ActionScript MX | Photoshop Diseño Web | Photoshop Diseño Gráfico | Adobe Premiere | Freehand MX | 3d Studio Max | 3d Studio Iluminación | 3d Studio Modelado | Word | Excel | Access
Secciones: Formación a Distancia | Formación a Empresas | Servicios a Empresas | Cursos a Distancia | Cursos On-Line | E-learning | Ofimática