Tutorial de API Reflection de Java con un ejemplo

¿Qué es la reflexión en Java?

La reflexión de Java es el proceso de analizar y modificar todas las capacidades de una clase en tiempo de ejecución. Reflection API en Java se utiliza para manipular clases y sus miembros, que incluyen campos, métodos, constructores, etc. en tiempo de ejecución.

Una de las ventajas de la API de reflexión en Java es que también puede manipular miembros privados de la clase.

El paquete java.lang.reflect proporciona muchas clases para implementar la reflexión java.Los métodos de la clase java.lang.Class se utilizan para recopilar los metadatos completos de una clase en particular.

En este tutorial, aprenderá-

Clase en el paquete java.lang.reflect

A continuación se muestra una lista de varias clases de Java en java.lang.package para implementar la reflexión-

  • Campo : esta clase se utiliza para recopilar información declarativa, como tipo de datos, modificador de acceso, nombre y valor de una variable.
  • Método : esta clase se utiliza para recopilar información declarativa, como el modificador de acceso, el tipo de devolución, el nombre, los tipos de parámetros y el tipo de excepción de un método.
  • Constructor : esta clase se utiliza para recopilar información declarativa, como modificador de acceso, nombre y tipos de parámetros de un constructor.
  • Modificador : esta clase se utiliza para recopilar información sobre un modificador de acceso particular.

Métodos utilizados en java.lang.Class

  • Public String getName () : devuelve el nombre de la clase.
  • public Class getSuperclass () : devuelve la referencia de superclase
  • Public Class [] getInterfaces () : devuelve una matriz de interfaces implementadas por la clase especificada
  • Public in getModifiers (): devuelve un valor entero que representa los modificadores de la clase especificada que debe pasarse como un parámetro al método ” public static String toString (int i)” que devuelve el especificador de acceso para la clase determinada.

Cómo obtener información completa sobre una clase

Para obtener información sobre variables, métodos y constructores de una clase, necesitamos crear un objeto de la clase.

El siguiente ejemplo muestra diferentes formas de crear el objeto de clase “clase”:

Ejemplo 1: Cómo obtener metadatos de clase

El siguiente ejemplo muestra cómo obtener metadatos como: nombre de clase, nombre de superclase, interfaces implementadas y modificadores de acceso de una clase.

Obtendremos los metadatos de la clase inferior nombrados Guru99Base.class:

  1. El nombre de la clase es: Guru99Base
  2. Sus modificadores de acceso son: públicos y abstractos
  3. Ha implementado interfaces: Serializable y Cloneable
  4. Como no ha ampliado ninguna clase explícitamente, su superclase es: java.lang.Object

Debajo de la clase obtendrá los metadatos de Guru99Base.class e imprímalo:

  1. imprime el nombre de la clase usando el método getName
  2. Imprima el nombre de la superclase utilizando el método getSuperClass (). GetName ()
  3. Imprima el nombre de las interfaces implementadas
  4. Imprimir los modificadores de acceso utilizados por la clase

Ejemplo 2: Cómo obtener metadatos de variable

Los siguientes ejemplos muestran cómo obtener los metadatos de la variable:

Aquí, estamos creando una clase llamada Guru99 VariableMetaData .class con algunas variables:

Pasos para obtener los metadatos sobre las variables en la clase anterior:

  1. Cree el objeto de clase de la clase anterior, es decir, Guru99 VariableMetaData.class, como se muestra a continuación:

  1. Obtenga los metadatos en forma de matriz de campo usando los métodos getFields ()o getDeclaredFields () como a continuación:

El método getFields () devuelve los metadatos de la variable pública de la clase especificada y de su superclase.

El método getDeclaredFields () solo devuelve los metadatos de todas las variables de la clase especificada.

  1. Obtenga el nombre de las variables usando el método “public String getName ()”.
  2. Obtenga el tipo de datos de las variables usando el método “public class getType ()”.
  3. Obtenga el valor de la variable usando el método “public xxx get (Field)”.

Aquí, xxx podría ser un byte o corto de cualquier tipo de valor que deseemos obtener.

  1. Obtenga los modificadores de acceso de las variables usando los métodos getModifier () y Modifier.toString (int i).

Aquí, estamos escribiendo una clase para obtener los metadatos de las variables presentes en la clase Guru99 VariableMetaData .class:

  1. Objeto de clase creado para Guru99VariableMetaData.class
  2. Obtuve todos los metadatos de las variables en una matriz de campo
  3. Imprimió todos los nombres de variable en la clase Guru99VariableMetaData.class
  4. Imprimió todos los tipos de datos de las variables en la clase Guru99VariableMetaData.class
  5. Imprimió todos los modificadores de acceso de las variables en la clase Guru99VariableMetaData.class
  6. Valores impresos de todas las variables en Impreso todos los tipos de datos de las variables en la clase Guru99VariableMetaData.class

Ejemplo 3: Cómo obtener metadatos del método

Los siguientes ejemplos muestran cómo obtener metadatos de un método:

Aquí, estamos creando una clase llamada Guru99MethodMetaData .class con algunos métodos

Pasos para obtener los metadatos sobre los métodos en la clase anterior:

  1. Cree el objeto de clase de la clase anterior, es decir, Guru99MethodMetaData.class, como se muestra a continuación:

  1. Obtenga la información del método en una matriz de métodos utilizando los métodos getMethods () y getDeclaredMethods () como se muestra a continuación:

El método getMethods () devuelve los metadatos de los métodos públicos de la clase especificada así como también de su superclase.

El método getDeclaredMethods () solo devuelve los metadatos de todos los métodos de la clase especificada.

  1. Obtenga el nombre del método utilizando el método getName ().
  2. Obtenga el tipo de devolución del método utilizando el método getReturnType ().
  3. Obtenga acceso a los modificadores de los métodos usando los métodos getModifiers ()y toString (int i).
  4. Obtenga los tipos de parámetros de método utilizando el método getParameterTypes ()que devuelve una matriz de clase.
  5. Obtener excepción lanzada mediante el método getExceptionTypes ()que devuelve una matriz de clase.

Aquí, estamos escribiendo una clase para obtener los metadatos de los métodos presentes en la clase Guru99MethodMetaData.class:

  1. Objeto de clase creado para Guru99MethodMetaData.class
  2. Obtuve todos los metadatos de todos los métodos en una matriz de Método
  3. Imprimió todos los nombres de método presentes en la clase Guru99MethodMetaData.class
  4. Tipos de devolución impresos de los métodos en la clase Guru99MethodMetaData.class
  5. Imprimió todos los modificadores de acceso de los métodos en la clase Guru99MethodMetaData.class
  6. Tipos de parámetros impresos de los métodos en Guru99MethodMetaData.class
  7. Las excepciones impresas se lanzan por métodos en Guru99MethodMetaData.class

Ejemplo 4: Cómo obtener metadatos de constructors

Los siguientes ejemplos muestran cómo obtener metadatos de constructores:

Aquí, estamos creando una clase llamada Guru99Constructor.class con diferentes constructores:

Aquí, estamos escribiendo una clase para obtener los metadatos de los constructores presentes en la clase Guru99Constructor.class:

  1. Objeto de clase creado para Guru99Constructor.class
  2. Obtuve todos los metadatos de todos los constructores en una matriz Constructor
  3. Imprimió todos los nombres del constructor presentes en la clase Guru99Constructor.class
  4. Imprimió todos los modificadores de acceso de los constructores en la clase Guru99Constructor.class
  5. Tipos de parámetros impresos de los constructores en Guru99Constructor.class
  6. Las excepciones impresas son lanzadas por los constructores en Guru99Constructor.class

Resumen:

  • La programación de reflexión en java ayuda a recuperar y modificar la información sobre las clases y los miembros de la clase, tales variables, métodos y constructores.
  • Reflection API en Java se puede implementar usando clases en el paquete java.lang.reflect y métodos de la clase java.lang.Class.
  • Algunos de los métodos más utilizados de la clase java.lang.Class son getName (), getSuperclass (), getInterfaces (), getModifiers () etc.
  • Algunas clases comúnmente usadas en el paquete java.lang.reflect son Campo, Método, Constructor, Modificador, etc.
  • Reflection API puede acceder a métodos privados y variables de una clase que podrían ser una amenaza para la seguridad.
  • Reflection API es una potente función proporcionada por Java, pero viene con algunos gastos generales, como un rendimiento más lento, vulnerabilidad de seguridad y problemas de permisos. Por lo tanto, la API de reflexión debe tratarse como el último recurso para realizar una operación.
0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *