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.
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 { // 接口代码 }
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.
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; } }
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
的对象,并设置对象的属性值。然后我们可以通过反射获取对象的属性值。
通过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("这是一个私有方法"); } }
通过上述代码,我们可以成功调用MyClass
类中的私有方法privateMethod()
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éeprivateMethod()
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!