- Java 11 o superior
- IntelliJ
Una vez que JDK y Intellij fue descargados e instalados, procederemos a validar que este bien instalado para comenzar las pruebas
Creación de Módulo, Paquetes, Clases, exportadores y privados.
Importar nuestro módulo, instanciar un objeto de una clase e inspeccionar sus funciones y propiedades mediante reflexión
- Comenzamos abriendo nuestro IntelliJ y vamos a la opción de crear nuevo proyecto Java llamado ModulosReflexion.
- IntelliJ nos muestra nuestro proyecto Java.
- Ahora vamos a dar click derecho sobre nuestro proyecto y daremos click en "New Module". Lo llamaremos "BAZModulo":
- Ahora vamos a crear un paquete llamado baz:
- Dentro del paquete baz vamos a crear la clase Persona:
- Persona.java
- Para ser su retroinspección mediante reflexión, la clase Persona tendrá la siguiente composición:
- private String nombre
- private int edad
- getNombre
- ImprimeInformaciónPersona
- getEdad
- setEdad(int edad)
Copie y pegue el siguiente código dentro de la clase Persona:
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public String nombre;
private int edad;
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public String getNombre() {
return nombre;
}
public void ImprimeInformacionPersona() {
System.out.println("El nombre es: " + nombre);
System.out.println("La edad es: " + edad);
}
- Nos vamos a nuestro archivo Main.java y creamos un objeto de la clase Persona:
import baz.Persona;
public class Main {
public static void main(String[] args) {
Persona p = new Persona("Julia", 10);
}
}
- Utilizando reflexión vamos a analizar la propiedad nombre de nuestra clase Persona. Copie y pegue la función inspeccionaVaribaleReflexión e invoquela enviándole el objeto creado de la clase Persona y la propiedad nombre:
public static void inspeccionaVariableReflexion(Persona p, String field) {
try {
Class<? extends Persona> extraerInformacionPersona = p.getClass();
Field varNombre = extraerInformacionPersona.getDeclaredField(field);
// Nombre de la variable
System.out.println(varNombre.getName());
// Tipo de la variable
System.out.println(varNombre.getType());
// Valor de la variable
System.out.println(varNombre.get(p));
// La variable es pública
System.out.println(Modifier.isPublic(varNombre.getModifiers()));
// La variable es privada
System.out.println(Modifier.isPrivate(varNombre.getModifiers()));
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
- Por último, utilizando reflexión vamos a analizar el metodo getNombre de nuestra clase Persona. Copie y pegue la función inspeccionaMetodoReflexion e invoquela enviándole el objeto creado de la clase Persona y el nombre de método getNombre:
public static void inspeccionaMetodoReflexion(Persona p, String m) {
try {
Class<? extends Persona> extraerInformacionPersona = p.getClass();
Method metodo = extraerInformacionPersona.getMethod(m);
//Nombre del método
System.out.println(metodo.getName());
// Cantidad de parametros
System.out.println(metodo.getParameterCount());
// El método es publico?
System.out.println(Modifier.isPublic(metodo.getModifiers()));
// El método es privado?
System.out.println(Modifier.isPrivate(metodo.getModifiers()));
// Tipo del return
System.out.println(metodo.getGenericReturnType().getTypeName());
// Invocar el método
System.out.println(metodo.invoke(p));
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}