Ingresar:

Wilfredo Vargas Almendras :: Blog :: Mas sobre generics con arreglos

May 08, 2007

Hace un tiempo estaba intentando hacer algo parecido a lo que esta en comentarios del siguiente codigo:
public class Prueba<T> {     private A<T>[] arreglo;          public Prueba( int t ){         //   en realidad deberia ser arreglo = new A<T>[t];  pero no compila         arreglo = new A[t];     } } class A<T>{     private T dato;          public void mostrar(){         System.out.println("El valor es: "+dato);     } }  

 y pues acabo de encontrar un tutorial donde me convence el motivo por el cual no puede ser de esta forma, más bien tenemos la opción de utilizar los wildcards para hacer algo como lo que se queria hacer, bueno lo que quiero compartirles es el tutorial, en especial la página 15, y bueno obviamente la lectura es muy rica.

Ahora entiendo a cabalidad de este detalle, pues si se pudiese hacer esto:
interface A<E> {     public void añadir(E e);     public E recuperar(int pos); } class Prueba {     public void metodo()     {         A<String>[] aes = new A<String>[10];  // Esto no compila, pero supongamos q si         Object o = aes;         Object[] oa = (Object[]) o;                ArrayList<Integer> as = new ArrayList<Integer>();         as.add(new Integer(3));         oa[0] = as;         String s = aes[1].recuperar(0);  // Esto si que seria un gran error     } }  

y pues por eso es que no nos deja poner el tipo en el parámetro, pues así omitiria el warning que muy correctamente sale cuando no ponemos el tipo (Aunque parezca medio extraño, sale el warning, y cuando pones lo que se pide, sale error).Pero todo tiene un porque, ahora bien tenemos la opción de hacer esto con los wildcards, probare un poco más sobre esto y pues los postearé.
Quiero decir que no me gusto mucho la idea de que se me diga que lo que queria hacer no se podia(y tampoco me eran muy convincentes los argumentos), y pues ahora veo que si se podría hacer con los wildcards, obviamente más restringido, de todas formas ya encontre una respuesta (en el tutorial) sobre el porque no sería muy apropiado :). Con esto no quiero decir que los anteriores argumentos que se me dierón no sean válidos, de hecho estos me ayudarón a entender mucho mejor algunas cosas.

Palabras clave: arreglos, generics, java, wildcards

Enviado por Wilfredo Vargas Almendras


Añadir un comentario

Tu texto de comentario

Tu nombre

Por favor ingresa el código de la imagen

Security Code