bibigeek.com  Tu blog de Programación Geek: Java, php, J2EE... y mucho más

Buenas a tod@s,
No es que haya dejado el blog…., pero he tenido mucho curro y no he podido dedicarle mucho tiempo al blog. Ahora espero ayudaros con nuevos POST. Este Post en concretamente van a ser varios…voy a explicar algunas de las mejoras y Novedades que tienen el Java 5, y así me servirá para repasar un poco.

Novedad y Mejora Java 5.0: Colecciones Genéricas

Definición de Colecciones:
Lo podemos definir como una estructura de Datos que almacena otros objetos, las cuales pueden ser recorridas de distintas formas según el tipo de Colección seleccionado.

Colecciones No-Genéricas VS Colecciones Genéricas

Las No – Genéricas:

  • Es el funcionamiento estándard de las Colecciones en Java, que es permitir el almacenamiento de cualquier Clase de Objeto. Por lo tanto se requirirá realizar un CASTING de cada una de las posiciones de la Colección
  • Esto suele ser una gran Fuente de Errores en Tiempo de Ejecución

Las Genéricas:

  • Sólo almacenan Objetos de una Clase
  • Tipo de la Colección se deberá indicar en la declaración de la Variable
  • Obtenemos como beneficio: más rendimiento y menores errores desde Compilación

Cómo Declarar Clases Genéricas


class nombreClase <alias> extends nombreSuperClase{
          /* Contenido Clase */
}

Este alias representa un Tipo que se definirá en Tiempo de Declaración.

Ejemplo:


class MyList<T> extends Vector{
.....
}

Cómo Instanciar Clases Genéricas


nombreClase <tipoClase> nombreVariable;

Ejemplo:


MyList<Integer> v1;

Detalles Concretos sobre las Colecciones Genéricas

Con la llegada del Java 5, Sun ha incorporado ya algunas Colecciones Generícas en su API en la que podemos ver sin problemas desde este link. Estas colecciones implementan fundamentalmente (pueden haber más) dos Interfaces:

  • Iterable
  • Collection

Las Colecciones más usadas y que permiten el uso de los Tipos Genéricos son: ArrayList, HasMap, TreeSet, Vector, Stack, etc.

Una utilidad muy importante en las Colecciones Genéricas, es la utilización del FOR MEJORADO. Este nuevo bucle lo incorpora SUN a partir de la especificación del Java 5. Os adjunto un ejemplo de código:


ArrayList<Integer> array = new ArrayList();
array.add(new Integer(5));
array.add(new Integer(12));
array.add(new Integer(2));
int contador = 0;
for (Integer salida: array){
     contador += salida.intValue();
}
System.out.println("Valor de Contador es: " + contador);

Uso de Comodines para las clases Genéricas

El Comodin ( ? ) es una restricción que deben cumplir los elementos que pueden formar parte de la Colección Genérica. Des esta forma le podemos indicar que tipo de elementos aceptará esta Colección Genérica.

Estos son los principales Usos:

  • <?>: Esto expresa que podrán ser tipos de cualquier clase.
  • <? extends clase>: Cualquier elemento de una subclase de la especificada.
  • <? super clase>: Cualquier elemento que pertenezca a una clase SUPER de la clase especificada.

De esta forma nos estamos definiendo el tipo concreto, con lo cual nos permitirá seleccionarlo con posterioridad. Como en todo, incluso más en la Programación, hay un PERO…. hay INCOMPATIBILIDADES con:

  • El FOR MEJORADO, este nuevo bucle no podrás ser utilizado cuando trabajemos con Comodines.
  • Hay ciertas incompatibilidades con algunos métodos de las clases, por ejemplo: el ADD no podrá ser utilizado; si podremos utilizar el ADDALL, dada ya una colección rellenada.

Veamos un ejemplo “Cómo utilizar el Comodín”


ArrayList<?> array = new ArrayList();
if(condición){
     ArrayList<Integer> arrayInt = new ArrayList();
     arrayInt.add(new Integer(2));
     arrayInt.add(new Integer(245));
     array.addAll(arrayInt);
}else{
     ArrayList<Boolean> arrayBol = new ArrayList();
     arrayBol.add(new Boolean(true));
     array.addAll(arrayBol);
}

Métodos Genéricos

Esto ya es lo último que voy a explicar sobre las Colecciones Genéricas. Lo relevante de este punto es que la nueva mejora de Java ha llegado a nivel de los métodos, con lo cual nos permitirá ser más Abstractos y a la vez mejorar nuestra programación.

Sintaxis para los Métodos Genéricos


mod_acceso <alias_tipo_Generico> tipoDevuelto nombreMetodo("Parametrización");

Podemos tener dos alternativas de Parametrización en los métodos: tipos Genericos (<alias> IdParametro) o  Colecciones Génericas (Clase <Alias> IdParametro).

Veamos un ejemplo de como utilizarlo:


/* Declaración del Método */
public <Alias> pruebaMetodo(List<Alias>lista, <Alias> param);

/* Llamada al Método */
---
List<Number> listaNumbers = new List();
Number n = new Number(2);
---
metodoPrueba(listaNumbers,n);

Espero haberme expresado correctamente y si encontráis algún error, no dudéis en poneros en contacto conmigo escribiendo un Comentario, ya que aun no tengo acabada mi página Personal, perdonadme :P .

Escribe un Comentario