Reflection API (VI) – Tipos Genericos

Los tipos genéricos fueron implementados como una transformación en tiempo de ejecución. Los tipos genéricos no permiten conocer en tiempo de ejecución el tipo con el que se ha parametrizado, es decir, en tiempo de ejecución no podemos distinguir si un atributo es Map o es Map. Cuando utilizamos tipos genéricos el compilador genera el mismo bytecode que cuando utilizamos tipos no genéricos, insertando en tiempo de ejecución el código necesarios para realizar un cast para convertirlos en el tipo apropiado en cada acceso. Debido a que el bytecode es idéntico, la información sobre el tipo del parámetro es almacenada en la clase mediante un nuevo atributo.

Mediante reflexión también seremos capaces de obtener en tiempo de ejecución información sobre tipos genéricos, tanto de atributos como parámetros devueltos por un método o parámetros pasados a un método.

Continuar leyendo

Reflection API (V) – Arrays

Un array es un objeto que contiene referencias de objetos con un número fijo de componentes del mismo tipo; la longitud de un array no se puede modificar. Para crear un array es necesario conocer su longitud y el tipo de los datos que va a contener. Cada uno de sus elementos puede ser un tipo primitivo, un objeto u otro array.

El manejo de arrays utilizando reflexión es algo diferente del resto de objetos. Lo primero que podemos hacer es comprobar si el objeto que estamos tratando es un array, ésto lo haremos utilizando el método Class.isArray. Cuando ya sabemos que nuestro objeto es una array nos apoyaremos en la clase java.lang.reflect.Array para realizar todas las operaciones.

Crear un Array

Para crear un Array tendremos que llamar al método Array.newInstance (Class arrayClass, int … size), donde le pasamos el tipo de los elementos que va a contener y el tamaño que tendrá el array. Si deseamos crear un array multidimensional se le pasaran varios tamaños cada uno para indicar cada una de las dimensiones del array.

Continuar leyendo