Java Reflection - ¿Que es reflexión? - ¿Por donde empezar con la Api Reflect? - Constructores el Api Reflect

Hoy vamos a ver el Api Reflect, o Reflexión en español.


Java Reflection - ¿Que es reflexión?

La Api Reflexión es una Api muy potente la cual nos brinda muchas posibilidades que en otros lenguajes de programación no tenemos.
Los desarrolladores inexpertos no tienen ni idea de su existencia y/o funcionamiento.
La API Reflect nos permite inspeccionar y manipular clases e interfaces (completas es decir métodos y campos) en tiempo de ejecución, sin conocer con anterioridad (es decir en el tiempo de compilación) los tipos y/o nombres de las clases especificas con las que estamos trabajando.

Puntualmente esta API nos brinda mucha información útil de las clases y/o interfaces.


Java Reflection - ¿Por donde empezar con la Api Reflect?

Todos los Objetos de java heredan de la clase java.lang.Object y por eso poseen un método llamado getClass() siendo su firma public final Class getClass(), este método nos retorna un objeto java.lang.Class el cual es nuestro punto de entrada para el API Reflect.

Pero por que hablamos de java.lang.Object, dame solo un segundo que ya te explico! (si no te recordas nada de Object pasa por acá!)

Podemos obtener la clase de 3 maneras diferentes.

OPCION 1: Sin instanciarla, conociendo el nombre en tiempo de compilación.

Class userClass = User.class;

OPCION 2: Sin instanciarla, sin conocer el nombre en tiempo de compilación


Class userClass = Class.forName("com.test.modelo.User");

Poniendo el nombre calificativo, es decir el nombre completo e incluyendo el package, en nuestro caso com.test.modelo

Si por algún problema la clase no llegara a existir lanzaría una excepción ClassNotFoundException para indicarlo.

OPCION 3: A través de un objeto, es decir una clase instanciada.

Class userClass  = x.getClass()

Bueno todo muy lindo pero donde esta el Api Reflect.


Java Reflection - Constructores el Api Reflect

Comencemos a ver los los métodos de la clase Constructor del packages java.lang.reflect.
jar rt.jar, de la librería del JRE.


  • equals(Object obj): Compara con un objeto especifico.
  • getAnnotation(Class<T> annotationClass): Retorna las anotaciones de un tipo especificado de dato si esta presente y si no existe retorna null.
  • getDeclaredAnnotations(): Retorna todas las anotaciones que son directamente presentadas en este elemento.
  • getDeclaringClass(): Retorna la clase object representada por las declaraciones el constructor representado por el objeto Constructor.
  • getExceptionTypes(): Retorna un array de la clases object, presentada por el tipo de una declaración exception.
  • getGenericExceptionTypes(): Retorna un array de los objectos que representa las excepciones declaras que pueden ser lanzada por el objecto Constructor.
  • getGenericParameterTypes(): Retorna un array de tipo object que representan los tipos parámetros, declarados en orden.
  • getModifiers(): Retorna los modificadores del lenguaje Java, para el constructor representado por el objeto Constructor, como un Integer.
  • getName(): Retorna el nombre de los constructores como un String.
  • getParameterAnnotations(): Retorna un array de arrays que representa las anotaciones en forma de parámetros, declarados en orden.
  • getParameterTypes(): Retorna un array de objetos que representan el los tipos de parámetros en un orden declarado.
  • getTypeParameters(): Retorna un array del tipo objeto TypeVariable que representa los tipos de variables declaradas por el declaración genérica representada por el tipo de objeto GenericDeclaration.
  • hashCode(): Retorna un hashcode.
  • isSynthetic(): Retorna verdadero si el constructor es un sintética, en otro caso retorna falso.
  • isVarArgs(): Retorna verdadero si el constructor fue declarado para tomar un numero de variables de argumentos, en otro caso retorna falso.
  • newInstance(Object... initargs): Usa los constructores representados por el objeto Constructor para crear y inicializar una nueva instancia del constructor declarando la clase, con los parámetros especificados de inicializacion.
  • toGenericString(): Retorna un String describiendo el constructor, incluyendo el tipo de parámetros.
  • toString(): Retorna un String describiendo el Constructor.

Bueno lo prometido es deuda comencemos a ver el Api Reflec, con los Constructores, teniendo la clase Persona, con 2 constructores uno con 2 parámetros y otro sin parámetros.

Api Reflect - Constructores Api Reflect


Utilizaremos la clase Constructor del packages java.lang.reflect. 

Bueno primero como dijimos arriba obtengamos la clase.


Class clase;
clase = Class.forName("ar.com.nico.Persona");

En nuestro caso utilizaremos el llamado de la clase no instanciada, ahora obtengamos los constructores de dicha clase.


 Constructor[] userConstructors = clase.getConstructors();
Pregunta, pero por que es un Array? es decir por que es Constructor[]?, la respuesta es obvia por que nos puede devolver mas de un constructor.

Finalmente recorremos y mostramos por pantalla los constructores.


for (int i=0; i < userConstructors.length; i++) {
constructor = userConstructors[i];
System.out.println("\n\t" + constructor.getName() );
}


Ejemplo completo:

Api Reflect - Constructores Api Reflect


Mas adelante continuaremos con mas del Api Reflect. Saludos!
Java Reflection - ¿Que es reflexión? - ¿Por donde empezar con la Api Reflect? - Constructores el Api Reflect Java Reflection - ¿Que es reflexión? - ¿Por donde empezar con la Api Reflect? - Constructores el Api Reflect Reviewed by El lado oscuro de java on febrero 19, 2016 Rating: 5

2 comentarios:

  1. que pena que nadie te agradezca compartir tus conocimientos xD pero gracias igual aunque no completaste la tarea

    ResponderEliminar

Con la tecnología de Blogger.