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.

Obtener los Constructores
La obtención de los constructores de una clase se realiza de la siguiente manera:

De esta manera obtendremos un array con todos los constructores públicos de la clase. La clase Constructor nos proporciona métodos para obtener el nombre, los modificadores, los tipos de los parámetros y las excepciones que pueden ser lanzadas.

Si lo que queremos es llamar a un constructor especifico y conocemos sus parámetros, podemos llamar al método getConstructor indicándole el tipo de los parámetros que le queremos pasar. Para indicarle los tipos crearemos un array con la clase de cada uno de los parámetros. Por ejemplo, vamos a obtener el constructor de la clase Timer que tiene como parámetros nombre de tipo String y un Boolean para indicar si va a ser un deamon:

Si no existe un constructor con estos parámetros se produce una excepción, NoSuchMethodException.

Parámetros del Constructor
Podemos obtener el tipo de los parámetros del constructor de la siguiente manera:

Instanciar un Objeto
Existen dos manera de crear instancias de una clase: mediante el método newInstance() de la clase Constructor y mediante el método Class.newInstance(). Pueden parecer iguales a simple vista pero tienen una serie de diferencias:

  • Mientras que Constructor.newInstance() pueden pasarsele parámetros y así poder llamar a cualquiera de los constructores, mediante Class.newInstance() únicamente se puede llamar al constructor vacío.
  • Con Constructor.newInstance() se puede llamar tanto a constructores visibles como privados, pero con Class.newInstance() debe tener el constructor público.

<<< Reflection API(I) – Manejo de clases

Reflection API(III) – Obteniendo Atributos >>>