sábado, 28 de febrero de 2009

Bucle for mejorado en java 5.0

Otra de las novedades que tiene Java 5 es el ciclo for mejorado, de tal manera que si vamos a recorrer un arreglo de String debemos colocar:

for(String valor: nombreArreglo){
System.out.println(valor);

}

Y así se estará recorriendo e imprimiendo en pantalla todo el arreglo, se necesita el tipo de dato del valor del arreglo separado con dos puntos del nombre del arreglo. Esto es una ventaja en cuanto a legibilidad, pero para los que estamos acostumbrados podemos seguir usando el recorrido a la manera de java 1.4 que todavía tiene vigencia. Ahora una de las ventajas que de este ciclo for se ve en las colecciones, hablemos de ello:

Con java 5 no es necesario crear un iterator para realizar un recorrido a una colección, inclusive se evitan los casteos explícitos que se realizaban para obtener los valores almacenados en ella, por ejemplo:
Si para hacer el recorrido por una colección escribíamos el siguiente código, en java 1.4:

for(Iterator iter=miCollect.Iterator();iter.hasnext();){
Integer intObjeto = (Integer) iter.next();
System.out.println(“”+intObjeto);

}


Ahora desde java 5 sólo tendría que escribirse:

for(Integer intObjeto: miCollect){
System.out.println(“”+intObjeto);
}

Reduciendo así la claridad del código y haciendolo mucho más simple.

domingo, 22 de febrero de 2009

Auto boxing y unboxing desde java 5.0

Siguiendo con la temática de las innovaciones de java 5.0 hablemos ahora sobre los llamados boxing y unboxing, siendo éstas operaciones automáticas que se realizan cuando se intenta asignar a un objeto de una clase envolvente, una variable creado con su tipo primitivo correspondiente, o viceversa, veamos un ejemplo con el siguiente código:

public class Boxing {

public static void main(String[] args) {
double primitivo1, primitivo2;
Double envuelto;
primitivo1=98.15;
envuelto=primitivo1;
System.out.println(envuelto);
primitivo2=envuelto;
System.out.println(primitivo2);

}

}

Podemos ver en las primeras dos líneas de el método main que se crean tres variables, primitivo1 y primitivo2 son variables del tipo primitivo double y el tercero de nombre "envuelto" es un objeto del tipo de referencia (o envolvente) Double. Como puede verse puedo crear un dato de tipo primitivo double y asignárle su valor a un objeto de su tipo de referencia Double, como también puedo hacer lo contrario.

Al proceso se asignar al objeto de la clase envolvente un dato de su tipo primitivo correspondiente se llama boxing
(En el código: envuelto=primitivo1) y al procedimiento contrario, es decir, a asignarle a un dato primitivo un objeto de su clase envolvente se llama unboxing (En el código: primitivo2 = envuelto).

Esta operación a diferencia del casteo o moldeo es una operación implícita, es decir, la realiza java automáticamente, no es necesaria ninguna instrucción.

Veamos como esto puede simplificarnos la vida con las colecciones, tomando como ejemplo un objeto Vector:

public class Boxing {

public static void main(String[] args) {
Vector<Integer> vect = new Vector<Integer>();
int primitivo=15;
vect.add(primitivo);
}

}


En el método main de la c
lase Boxing se creó un objeto Vector con Generics que almacena Integer, si el boxing no estuviese disponible, yo tendría que haber realizado una creación de un objeto Integer, de la siguiente manera:

Integer envuelto = new Integer(primitivo);

Y después asignar al vector vect.add(envuelto) ya que Vector maneja Integer, por lo que nos ahorraríamos un línea de código, simplificando el trabajo y dejando a java resulelva esos inconvenientes. es decir, se elimina la necesidad de crear un objeto Integer para colocar un int en la colección.

Las conversiones permitidas son:

boolean <--> Boolean
byte <--> Byte
char <--> Character
short <--> Short
int <--> Integer
long
<--> Long
float <--> Float
double <--> Double


Bueno, espero haberme explicado y esta información les sea útil para conocer más herramientas sobre java 5.0, sin más, me despido hasta una próxima edición.