Ir al contenido principal

La herejia de los generics

Como parte de las novedades incluidas en Java 5, contamos con los generic, genéricos emplantillados, que permiten realizar el tipado de métodos, colecciones, etc.
Sin embargo, me parece ridículo que algo tan básico como el polimorfismo, no este soportado en esta pobre implementación, veamos un ejemplo para entender mi argumento de mejor manera:

Consideremos las clases:

public class SuperClass {

}

public class SubClass extends SuperClass {

}

Y consideremos las clase generic, MyList que extiende de ArrayList, convenientemente emplantillada para limitar el acceso a solo objetos que extiendan de SuperClass:

public class MyList<t extends SuperClass> extends ArrayList<t> {


private static final long serialVersionUID = -2733586086914849461L;

public MyList() {
}

public MyList(int initialCapacity) {
super(initialCapacity);
}

public MyList(Collection c) {
super(c);
}

}

Hasta aquí, todo de maravilla, ahora intentemos utilizar esta nueva clase:

private static void getList () {

MyList<subclass> list1 = new MyList<subclass> (); // valido
MyList<superclass> list2 = new MyList<superclass> (); // valido
MyList<superclass> list3 = new MyList<subclass> (); // invalido
}

Como ven cuando el tipo y la instancia de la colección, son del mismo tipo de objeto, los genéricos funcionan, sin embargo cuando se intenta hacer que las instancias de la implementación de la colección sean genéricos, nos damos cuenta que no lo soportan, lo cual limita mucho el poder de los genéricos en Java.

No todo en el lado de la luz, es hermoso....

Comentarios

Gabriel Solano dijo…
Buena observación. Habría que preguntarse si hubo alguna razón lógica para no permitir ese "matrimonio" entre las plantillas y el poliformismo.
jsanca dijo…
Me parece que no es mas que un error en la implementación, pues no le encuentro ninguna lógica.

Entradas más populares de este blog

Pasos para remover Postgresql 8.3 en MAC OS

Tomado de: http://forums.enterprisedb.com/posts/list/1437.page In Mac OSX: (Assuming Default Locations) Via uninstaller: 1) In the installation directory, there will be a uninstall-postgresql.app file will be there, executing (double clicking) that will uninstall the postgresql installation. Manual Uninstallation: 1) Stop the server sudo /sbin/SystemStarter stop postgresql-8.3 2) Remove menu shortcuts: sudo rm -rf /Applications/PostgreSQL 8.3 3) Remove the ini file sudo rm -rf /etc/postgres-reg.ini 4) Removing Startup Items sudo rm -rf /Library/StartupItems/postgresql-8.3 5) Remove the data and installed files sudo rm -rf /Library/PostgreSQL/8.3 6) Delete the user postgres sudo dscl . delete /users/postgres

Enrique Bunbury - 3 de Octubre 2009 - Heredia CR

Via periodico la nacion, me entero de este conciertazo: http://www.nacion.com/viva/2009/julio/29/viva2042768.html Ah esperar mas detalles y la venta de la entradas, "Para solo si me perdonas ..." EDIT ..... Via http://www.enriquebunbury.com/hellville.aspx (gracias a andres por su post) venta anticipada: Entradas a la venta a partir del 13 de agosto en: www.costaricaticket.com Por ahi estare anunciando, el 13 si las estan vendiendo!

Depeche Mode - Costa Rica - 8 de Octubre 2009

Que año de conciertos, primero Jaguares, ahora los Cadillacs y en Octubre Depeche Mode, solo nos falta RadioHead, para ser feliz. Así como lo oyen; desde el sitio principal de Depeche (clickea aquí ), pueden ver la siguiente fecha: Thursday, October 8th, 2009 San Jose, Costa Rica En venta: June 15th, 2009 Demasiado bueno!!!!! La cita será en Octubre, eso si no nos mata la fiebre porcina :( saludos, J