Reflection API (VII) – Enumerados

Un enumerado es usado para definir tipos de datos que tienen cierto orden, pudiendo ser usados asignando un valor a cada uno de los elementos. Todos los enumerados extienden implícitamente de java.lang.Enum. Los enumerados contienen una o más constantes, que define una única instancia del tipo enumerado. Una definición de un enumerado es muy similar a una clase en el que puede tener campos, métodos y constructores (con algunas restricciones).

Puesto que los enumerados son clases, la reflexión no tiene necesidad de definir explícitamente una clase java.lang.reflect.Enum. En el Reflection API … Continuar leyendo

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 … 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 … Continuar leyendo

Reflection API (IV) – Métodos

Usando reflexión podemos acceder a los métodos de una clase en tiempo de ejecución. Para ello podemos utilizar la clase Method. Usar la reflexión nos permite acceder a los métodos de una clase y determinar si éste ha sido heredado o pertenece a la clase que estamos utilizando, algo que es imposible saber cuando llamamos a un método sin reflexión.

Obtención de los Métodos de una Clase

Para obtener los métodos de una clase utilizaremos el método getMethods de la clase Class y nos devolverá un array … Continuar leyendo

Reflection API(III) – Obteniendo Atributos

Mediante el uso de la reflexión podemos acceder a los atributos de una clase y modificar su valor en tiempo de ejecución. Esto lo podemos hacer mediante la clase java.lang.reflect.Field. Este clase nos permitirá acceder a toda la información de los atributos, como nombre, tipo, modificadores o anotaciones.

Obtener los Atributos

Para obtener todos los atributos de una clase utilizaremos el método getFields():

Reflection API(II) – Utilizando los Constructores

Los constructores son utilizados en la creación de objetos, que son la instanciación de una clase. Por lo general llevan a cabo las operaciones necesarias para inicializar la clase antes de que se invocan los métodos o se acceda a los campos. La Reflexión nos permite conocer y recuperar los constructores de una clase y obtener información de su declaración, como los modificadores, los parámetros, las anotaciones, y excepciones que se producen. También tendremos la posibilidad de instanciar una clase mediante la utilización de estos constructores. El API de Reflexión nos proporciona la clase java.lang.reflect.Constructor para el manejo de los constructores.

Reflection API(I) – Manejo de clases

Cuando se compila el código fuente de un programa se pierde la información de la estructura del programa pero se conserva ésta información en forma de metadatos. La reflexión es utilizada principalmente para acceder a esta información en tiempo de ejecución. Podemos acceder a clases, interfaces, métodos o atributos sin conocer su nombre o el tipo de un objeto. De esta manera podremos instanciar clases y llamar a los métodos en tiempo de ejecución.

A pesar de todas estas ventajas la reflexión puede generar problemas de seguridad o rendimiento en nuestras aplicaciones. … Continuar leyendo