La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Generics Definición y uso Subtipos Wildcards Type erasure.

Presentaciones similares


Presentación del tema: "Generics Definición y uso Subtipos Wildcards Type erasure."— Transcripción de la presentación:

1

2 Generics Definición y uso Subtipos Wildcards Type erasure

3

4 Generics permite abstraerse sobre los tipos Clases, interfaces y métodos pueden ser parametrizadas como Tipos. Permite crear código seguro. Si el código compila sin errores o warnings entonces no lanzará excepciones de ClassCastException en tiempo de ejecución. Permite crear código más simple y legible

5 Problemas: El compilador no puede chequear tipos en tiempo de compilación. Imposibilidad de definir listas de determinados tipos Ventajas: Decirle al compilador el tipo que maneja la colección El compilador realiza el casting

6 Definición:LinkedList Parametro E representa el tipo de elementos guardados en la lista. Uso Reemplazar el parametro por el tipo concreto, ejemplo: Solo guardará elementos Integer en la lista LinkedList li = new LinkedList ();

7 // Definición Interface List interface List { void add(E x); Iterator iterator(); } // Uso con tipo concreto String List ls = new ArrayList (10);

8 En J2SE 5.0, todas las colecciones se reescribieron para ser clases Generics Vector vs = new Vector (); vs.add(new Integer(5)); // Compile error! vs.add(new String(hello)); String s = vs.get(0); // No casting needed

9 Clases generics pueden tener múltiples parámetros. HashMap map = new HashMap (); map.put(wombat, new Mammal("wombat")); Mammal w = map.get(wombat);

10 Casting de tipos: Object o = new String(pepe); //Correcto El siguiente código es incorrecto. Puede existir un error en tiempo de ejecución al generalizar. ArrayList ai = new ArrayList (); ArrayList ao = ai; // puede fallar ao.add(new Object()); Integer i = ai.get(0); // runtime ClassCastException

11 El siguiente código funciona: ArrayList ai = new ArrayList (); List li = new ArrayList (); Collection ci = new ArrayList (); Collection cs = new Vector (4); Si existen relaciones de herencia entre las clases generics

12 El siguiente código funciona: ArrayList an = new ArrayList (); an.add(new Integer(5)); an.add(new Long(1000L)); an.add(new String(hello)); // compile error Entradas en una colección mantienen relación de herencia.

13 Problema. Escribir el código que imprima el contenido de cualquier colección. Primera implementación: static void printCollection(Collection cols){ Iterator iter = cols.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); }

14 Solución – usar un comodin como tipo de argumento Collection significa: colección de tipo desconocido static void printCollection(Collection cols){ Iterator iter = cols.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); }

15 Puedo instanciar una clase definida con generics sin utilizar ningún parámetro. Código escrito en versiones previas a J2SE 5.0 sigue compilando sobre la JVM J2SE 5.0. ArrayList a = new ArrayList ();

16 Toda la información generada con Generics es eliminada luego de la compilación. La información de generics no existe en tiempo de ejecución ArrayList ai = new ArrayList (); ArrayList as = new ArrayList (); System.out.println(ai.getClass() == as.getClass()); ¿Que devuelve?

17 Agregar en la definición de la clase los tipos de parametros Puedo definir mas de un tipo Class XXX Por estandarización, utilizar letras mayusculas para definir los tipos. Utilizar dentro de la clase los tipos de parametros definidos en el encabezado como un tipo más.

18 Ejemplo: public class Pair { F first; S second; public Pair(F f, S s) { first = f; second = s; } F getFirst(){ return first; }

19 Se pueden definir especificaciones sobre tipos generics al utilizar comodines Class Numero {} Void metodo(Numero num){} No se puede indicar que un tipo generics implementa una interface. Class Numero {} //error de compilación Void metodo(Numero num){} //error de compilación

20 Generics: qué son? Cómo se usan? Definición y uso Subtipos: como se aplica? Wildcards: ejemplos. Type erasure: ejemplos.

21 The Java Tutorial Trail de Generic rics/index.html Documentación online Java SE 5 Especificación de la API Java SE 5


Descargar ppt "Generics Definición y uso Subtipos Wildcards Type erasure."

Presentaciones similares


Anuncios Google