Java reflection y los tipos genéricos
By laparca
Por temas del trabajo llevo unos días pegandome con java reflection y los tipos de genéricos. Debo reconocer que las dos cosas están muy bien, pero entre ellas no se llevan bien. Para facilitar un poco la cosa voy a poner un ejemplo de un tipo genérico:
El código anterior no hace nada, pero nos permite ver que creamos una clase Lista que es genérica. El hecho de que sea genérica significa que podemos decir que la lista podrá almacenar cualquier tipo de dato y que se lo indicaremo al crearla (antiguamente en java sólo se podía almacenar un tipo de dato: Object).
Mi problema empieza cuando yo necesito desde una instancia de la clase Lista cuál es el tipo de dato que almacena. Inicialmente sería tan sencillo como hace lo siguiente:
El problema es que, según parece, en la práctica java no utiliza genéricos, sino que sólo los comprueba en tiempo de compilación. Esto significa que una vez compilado el programa, tipo deja de ser un tipo conocido y pasa a ser algo completamente indeterminado, o dicho de otro modo, se convierte en un Object. A causa de esto, la sentencia anterior (tipo.class) genera un error de compilación.
Buscando por el gran Google encontré una referencia a Hibernate donde comentaban un modo de hacerlo:
Lo he estado probando y lo único que puedo decir es que falla en la ejecución. La sentencia anterior genera una CastException, así que nada.
Y yo necesito poder saber el tipo del genérico :'(