Maison > Java > javaDidacticiel > Trois façons d'acquérir des compétences de réflexion Java

Trois façons d'acquérir des compétences de réflexion Java

WBOY
Libérer: 2024-01-03 14:00:53
original
1244 Les gens l'ont consulté

Trois façons dacquérir des compétences de réflexion Java

Comprendre en profondeur les trois techniques de réflexion Java

Introduction : La réflexion Java est une technique de programmation puissante qui peut obtenir dynamiquement des informations pertinentes sur une classe et faire fonctionner ses membres au moment de l'exécution. Cet article présentera trois techniques avancées de réflexion Java et donnera des exemples de code spécifiques.

  1. Obtenir des informations complètes sur une classe

Grâce à la réflexion Java, nous pouvons obtenir des informations complètes sur une classe, y compris le nom de la classe, la classe parent, les interfaces implémentées, les méthodes, les champs, etc. Voici un exemple de code pour obtenir des informations complètes sur une classe :

import java.lang.reflect.*;

public class ReflectionDemo {
    public static void main(String[] args) {
        try {
            // 获取类名
            Class<?> cls = Class.forName("com.example.MyClass");
            System.out.println("类名:" + cls.getName());

            // 获取父类名
            Class<?> superClass = cls.getSuperclass();
            System.out.println("父类名:" + superClass.getName());

            // 获取实现的接口名
            Class<?>[] interfaces = cls.getInterfaces();
            for (Class<?> anInterface : interfaces) {
                System.out.println("接口名:" + anInterface.getName());
            }

            // 获取方法名
            Method[] methods = cls.getDeclaredMethods();
            for (Method method : methods) {
                System.out.println("方法名:" + method.getName());
            }

            // 获取字段名
            Field[] fields = cls.getDeclaredFields();
            for (Field field : fields) {
                System.out.println("字段名:" + field.getName());
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class MyClass extends ParentClass implements MyInterface {
    private String name;
    public int age;

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

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

class ParentClass {
    // 父类代码
}

interface MyInterface {
    // 接口代码
}
Copier après la connexion

Grâce au code ci-dessus, nous pouvons obtenir des informations telles que le nom de la classe, le nom de la classe parent, le nom de l'interface implémentée, le nom de la méthode et le nom du champ.

  1. Créer des objets dynamiquement

La réflexion Java peut également créer des objets dynamiquement au moment de l'exécution. Ce qui suit est un exemple de code pour créer dynamiquement un objet :

import java.lang.reflect.*;

public class ReflectionDemo {
    public static void main(String[] args) {
        try {
            // 获取类名
            Class<?> cls = Class.forName("com.example.MyClass");

            // 创建对象
            Object obj = cls.getDeclaredConstructor().newInstance();

            // 设置属性
            Field nameField = cls.getDeclaredField("name");
            Field ageField = cls.getDeclaredField("age");
            nameField.setAccessible(true);
            ageField.setAccessible(true);
            nameField.set(obj, "Tom");
            ageField.set(obj, 20);

            // 获取属性
            String name = (String) nameField.get(obj);
            int age = (int) ageField.get(obj);
            System.out.println("姓名:" + name);
            System.out.println("年龄:" + age);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyClass {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Copier après la connexion

Grâce au code ci-dessus, nous pouvons créer dynamiquement un objet de MyClass et définir les valeurs d'attribut de l'objet. Ensuite, nous pouvons obtenir les valeurs des propriétés de l'objet par réflexion. MyClass的对象,并设置对象的属性值。然后我们可以通过反射获取对象的属性值。

  1. 调用私有方法

通过Java反射,我们可以调用类中的私有方法。以下是一个调用私有方法的示例代码:

import java.lang.reflect.*;

public class ReflectionDemo {
    public static void main(String[] args) {
        try {
            // 获取类名
            Class<?> cls = Class.forName("com.example.MyClass");

            // 创建对象
            Object obj = cls.getDeclaredConstructor().newInstance();

            // 获取私有方法
            Method privateMethod = cls.getDeclaredMethod("privateMethod");

            // 调用私有方法
            privateMethod.setAccessible(true);
            privateMethod.invoke(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyClass {
    private void privateMethod() {
        System.out.println("这是一个私有方法");
    }
}
Copier après la connexion

通过上述代码,我们可以成功调用MyClass类中的私有方法privateMethod()

    Appel de méthodes privées

    Grâce à la réflexion Java, nous pouvons appeler des méthodes privées dans une classe. Voici un exemple de code pour appeler une méthode privée :

    rrreee🎜Grâce au code ci-dessus, nous pouvons appeler avec succès la méthode privée privateMethod() dans la classe MyClass. 🎜🎜Résumé : 🎜🎜Grâce aux trois techniques de réflexion Java : obtenir des informations complètes sur la classe, créer dynamiquement des objets et appeler des méthodes privées, nous pouvons obtenir dynamiquement des informations pertinentes sur la classe au moment de l'exécution sans modifier le code existant. . Cela nous donne une plus grande flexibilité et évolutivité, nous permettant d'écrire du code plus efficacement. Cependant, des précautions doivent être prises pour garantir la sécurité et les performances lors de l'utilisation de la réflexion. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal