GH0D\RGH)XQGDPHQWRVGH7HOHPiWLFD ÈUHDGH,QJHQLHUtD7HOHPiWLFD 'HSDUWDPHQWRGH,QJHQLHUtDGH6LVWHPDV\$XWRPiWLFD (VFXHOD6XSHULRUGH,QJHQLHURV 8QLYHUVLGDGGH6HYLOOD (MHUFLFLRSXQWRV Los tipos genéricos son clases parametrizadas por uno o más tipos que deben ser facilitados por el programador cuando quiera crear objetos de esa clase. Estas clases pueden usar los métodos genéricos, en los que los argumentos; y el resultado puede incluir referencias a tipos que no se conocerán hasta que vayamos a usar el método. • Implemente en el lenguaje de programación Java la clase genérica 3DUHMD67! en el paquete que permite mediante su instanciación una asociación de dos datos de tipos formales 6 y 7. Proporcione su constructor, y los métodos JHW y VHW para ambos tipos. Implemente en el lenguaje de programación Java la clase $VRFLD)LFKHURV, en el paquete (MHUFLFLR que use la clase 3DUHMD67! para asociar la primera línea de un fichero con la (MHUFLFLR • • primera del segundo fichero, la segunda línea con la segunda línea, y así sucesivamente utilizando objetos de tipo 6WULQJ. Los objetos creados con los constructores 3DUHMD67!se añadirán a una estructura de tipo $UUD\/LVW7!. Implemente una clase con el método PDLQ que invoque de forma apropiada los objetos para que realice la operación indicada. (MHUFLFLRSXQWRV • Implemente en el lenguaje de programación Java la clase &DGHQDV)LOWUDGDV que implemente los métodos de ,WHUDWRU(!, para que filtre las cadenas (objetos del tipo 6WULQJ) que tenga una longitud superior a un determinado valor proporcionado mediante el constructor de la clase. El constructor constará de dos parámetros: Un iterador con los objetos a filtrar y la longitud máxima a partir de la cual los objetos de tipo 6WULQJ del iterador son descartados. • El método UHPRYH , implementa una operación que no se va a utilizar. Deberá lanzar la excepción MDYDXWLO8QVXSSRUWHG2SHUDWLRQ([FHSWLRQ. El método QH[Wgenerará la excepción 1R6XFK(OHPHQW([FHSWLRQ si se invoca y no hay más elementos en el iterador. • Implemente una clase que instancia la clase &DGHQDV)LOWUDGDV, en el método PDLQ, use la clase $UUD\/LVW(! para insertar los objetos de tipo 6WULQJ, para poder proporcionarla al constructor de la clase. • Implemente un método public void SULQW&ROOHFWLRQ(Collection<? extends Object> c) que proporciona por la salida estándar los objetos de la colección mediante un bucle for-each. • Implemente en el método PDLQ, el recorrido mediante los métodos de iteración la secuencia de cadenas filtradas. (MHUFLFLR6ROXFLyQ package Ejercicio1; import java.util.ArrayList; import java.util.List; public class Pareja<S,T>{ private S primero; private T segundo; public Pareja(S primero, T segundo){ this.primero = primero; this.segundo = segundo; } public S getS(){ return this.primero; } public T getT(){ return this.segundo; } public void setS(S s){ this.primero = s; } public void setT(T t){ this.segundo = t; } } Página-2 package Ejercicio1; import import import import import import import java.util.ArrayList; java.util.List; java.io.InputStreamReader; java.io.BufferedReader; java.io.FileInputStream; java.io.FileNotFoundException; java.io.IOException; public class AsociaFicheros{ private BufferedReader primero; private BufferedReader segundo; public AsociaFicheros(String fichero1, String fichero2){ try{ this.primero = new BufferedReader(new InputStreamReader(new FileInputStream(fichero1))); this.segundo = new BufferedReader(new InputStreamReader(new FileInputStream(fichero2))); }catch(FileNotFoundException e){ System.out.println("Fichero no encontrado " + e); System.exit(0); } } public ArrayList<Pareja> lectura(){ String s1 = null; String s2 = null; Pareja<String,String> o = null; ArrayList<Pareja> resultado = new ArrayList<Pareja>(); try{ s1 = primero.readLine(); s2 = segundo.readLine(); for(; s1 != null || s2 != null;){ System.out.println("holla "+ s1 +s2); o = new Pareja<String,String>(s1,s2); resultado.add(o); s1 = primero.readLine(); s2 = segundo.readLine(); } }catch(IOException e){ System.out.println("Error en lectura" + e); System.exit(0); } return resultado; } public void cierreFicheros(){ try{ this.primero.close(); this.segundo.close(); }catch(IOException e){ System.out.println(e); } } } class ppal{ public static void main(String args[]){ AsociaFicheros f = new AsociaFicheros("a","b"); f.lectura(); f.cierreFicheros(); } } Página-3 (MHUFLFLR6ROXFLyQ import import import import import java.util.Iterator; java.util.Collection; java.util.ArrayList; java.util.List; java.util.NoSuchElementException; public class Ejercicio3 implements Iterator<String>{ private Iterator cadenas; private String sigCortos; //null si next no conocido private final int maxLong; //solo devuelve cadenas <= a dicho valor public Ejercicio3 (Iterator<String> this.cadenas = cadenas; this.maxLong = maxLong; this.sigCortos = null; } cadenas,int maxLong){ public boolean hasNext(){ if(this.sigCortos != null) //ya encontrado return true; while (cadenas.hasNext()){ this.sigCortos= (String)cadenas.next(); if(this.sigCortos.length() <= maxLong) return true; } this.sigCortos = null; //no encontrado return false; } public String next(){ if((this.sigCortos == null) && (!this.hasNext())) throw new NoSuchElementException(); String n = sigCortos; //recuerda sigCorto sigCortos = null; return n; } public void remove(){ throw new UnsupportedOperationException(); } public void printCollection(Collection<? extends Object> c){ for(Object e : c){ System.out.println(e); } } } class Ejemplo{ public static void main(String args[]){ List<String> c = new ArrayList<String>(); c.add("UnoUnoUno"); c.add("DosDos"); c.add("TresTresTres"); c.add("CuatroCuatro"); c.iterator(); //el parámetro indica Ejercicio3 s = new Ejercicio3 (c.iterator(),10); //la longitud máxima //de la cadena para //que no sea filtrada while(s.hasNext()){ System.out.println((String)s.next()); } System.out.println("--------------------"); s.printCollection(s); } } Página-4