¿Reflejo de Java? esta cosa es rara

Tecnología Java Reflection: Exploración del mecanismo operativo de los programas Java

Como lenguaje popular, Java se usa ampliamente en varios proyectos. La tecnología de reflexión es una de las funciones básicas importantes de Java. A través de la tecnología de reflexión, los programas Java pueden obtener información de clase, acceder a métodos y atributos de clase en tiempo de ejecución e incluso crear objetos dinámicamente y llamar a métodos de objetos, lo que hace que la programación sea más flexible y eficiente. Este artículo presentará el principio de funcionamiento, el método de uso y los casos relacionados del mecanismo de reflexión de Java.

1. El concepto y principio del mecanismo de reflexión.

Cuando se ejecuta un programa Java, compilará el código fuente en un archivo .class y finalmente generará un programa ejecutable. Durante este proceso, la máquina virtual Java realiza operaciones como cargar, vincular e inicializar el archivo .class para realizar la ejecución del programa. El mecanismo de reflexión es una tecnología para analizar y operar las clases Java cargadas cuando el programa se está ejecutando.

A través del mecanismo de reflexión, un programa Java puede analizar la estructura de una clase en tiempo de ejecución y obtener información como métodos, atributos y constructores de la clase. En concreto, el mecanismo de reflexión incluye principalmente los siguientes tres aspectos:

1. Obtenga el objeto Class de la clase: cada clase Java tiene un objeto Class correspondiente en tiempo de ejecución, y el mecanismo de reflexión puede obtener información relevante a través del objeto Class.

2. Acceder a los métodos y propiedades del objeto: el mecanismo de reflexión puede obtener los métodos, propiedades y constructores de la clase a través del objeto Class, llamarlos y establecerlos.

3. Crear nuevos objetos: el mecanismo de reflexión puede crear dinámicamente nuevos objetos Java y llamar a los métodos y propiedades de los objetos.

En segundo lugar, el método de utilizar el mecanismo de reflexión

1. Obtener el objeto Clase

Hay tres formas de obtener el objeto Class:

1) Crear un objeto Clase por nombre de clase

Class clz = Class.forName("java.lang.String");

2) Obtener el objeto Clase a través del método getClass() del objeto instancia de la clase

String s = new String();
Class clz = s.getClass();

3) Obtener el objeto Clase a través del atributo .class de la clase

Class clz = int.class;

2. Obtenga las propiedades y métodos de la clase

Los constructores, métodos y propiedades de una clase se pueden obtener mediante:

1) Obtener el constructor de la clase.

Constructor[] constructors = clz.getDeclaredConstructors();

2) Obtener las propiedades de los miembros de la clase

Field[] fields = clz.getDeclaredFields();

3) Obtenga el método miembro de la clase

Method[] methods = clz.getDeclaredMethods();

Para las propiedades y métodos de la clase, también puede llamarlos a través de los siguientes métodos:

1) Llamar al método de la clase.

Method method = clz.getDeclaredMethod("methodName", parameterTypes);
Object result = method.invoke(object, args);

2) Leer o establecer las propiedades de los miembros de la clase

Field field = clz.getDeclaredField("fieldName");
field.setAccessible(true);
Object result = field.get(object);
field.set(object, value);

3) Crear un nuevo objeto

Constructor constructor = clz.getDeclaredConstructor(parameterTypes);
Object object = constructor.newInstance(args);

Específicamente, el método createNewInstance usa tecnología de reflexión para crear un objeto con un nombre de clase específico y lo devuelve. Al mismo tiempo, a través de los métodos getDeclaredMethod e invocar, se pueden llamar los métodos en el objeto y devolver los resultados de la ejecución. Del mismo modo, los métodos getDeclaredField y get y set pueden leer o establecer los valores de las propiedades de los miembros en el objeto.

3. La tecnología del reflejo ha aterrizado (Glory of the King Edition)

El siguiente es un código de caso de un mecanismo de reflexión simple. En este ejemplo, usaremos el mecanismo de reflexión para crear un objeto personalizado y llamar a sus métodos y variables miembro en el objeto para su procesamiento.

¿Cómo usar la tecnología de reflexión para crear héroes King of Glory?

En el juego Glory of Kings, los héroes tienen sus propios atributos únicos. Por ejemplo, el poder de ataque de Yu Ji es relativamente alto, mientras que el poder de defensa de Cheng Yaojin es muy fuerte. ¿Qué debemos hacer si queremos crear un objeto héroe y establecer valores de atributo a través de la tecnología de reflexión? A continuación, vamos a dar una breve introducción.

Primero, necesitamos definir una clase de héroe como plantilla para los héroes. el código se muestra a continuación:

public class Hero {
    private String name;
    private int attack;
    private int defense;

    public Hero() {
    }

    public Hero(String name, int attack, int defense) {
        this.name = name;
        this.attack = attack;
        this.defense = defense;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAttack() {
        return attack;
    }

    public void setAttack(int attack) {
        this.attack = attack;
    }

    public int getDefense() {
        return defense;
    }

    public void setDefense(int defense) {
        this.defense = defense;
    }

    @Override
    public String toString() {
        return "Hero{" +
                "name='" + name + '\'' +
                ", attack=" + attack +
                ", defense=" + defense +
                '}';
    }
}

A continuación, podemos definir algunas clases de héroe específicas, heredar de la clase Hero y reescribir algunas propiedades o métodos según sus características. Por ejemplo, Yu Ji se puede definir como:

public class YuJi extends Hero {
    public YuJi() {
        super("虞姬", 100, 50);
    }
}

Finalmente, podemos usar técnicas de reflexión para crear héroes y establecer sus valores de atributos. El código específico es el siguiente:

public class ReflectionTest {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("com.example.YuJi"); // 获取YuJi类的Class对象
        Object obj = clazz.newInstance(); // 动态创建YuJi对象

        Field attackField = clazz.getDeclaredField("attack"); // 获取attack属性
        attackField.setAccessible(true); // 设置访问权限为true
        attackField.set(obj, 200); // 设置attack属性值为200

        Field defenseField = clazz.getDeclaredField("defense"); // 获取defense属性
        defenseField.setAccessible(true); // 设置访问权限为true
        defenseField.set(obj, 80); // 设置defense属性值为80

        System.out.println(obj); // 输出YuJi对象
    }
}

Ejecute el código anterior, el resultado es: Héroe{nombre='Yu Ji', ataque=200, defensa=80}.

A través del caso anterior, podemos ver que el uso de la tecnología de reflexión de Java puede ayudarnos a crear dinámicamente objetos héroe y establecer los valores de atributos correspondientes. En el desarrollo real, la tecnología de reflexión tiene muchos otros escenarios de aplicación, como proxy dinámico, procesador de anotaciones, etc.

Resumir

Los héroes de Glory of Kings tienen sus propios atributos únicos, y podemos usar la tecnología de reflexión para crear y establecer dinámicamente estos atributos. En el desarrollo real, la tecnología de reflexión nos brinda una forma muy flexible y extensible de manipular información relacionada, como clases, métodos y atributos.

código var = "5c544e5b-0e30-4abc-8076-df5862630dff"

Supongo que te gusta

Origin blog.csdn.net/weixin_39570751/article/details/130866061
Recomendado
Clasificación