Java リフレクションを深く理解するための 3 つのテクニック
はじめに: Java リフレクションは、実行時にクラス関連の情報を動的に取得して操作できる強力なプログラミング手法です。クラスのメンバーたち。この記事では、Java リフレクションの 3 つの高度なテクニックを紹介し、具体的なコード例を示します。
Java リフレクションを通じて、クラス名、親クラス、実装されたインターフェイス、メソッド、フィールドは待ちます。以下は、クラスに関する完全な情報を取得するためのサンプル コードです。
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 { // 接口代码 }
上記のコードを通じて、クラス名、親クラス名、実装されたインターフェイス名、メソッド名、フィールド名、およびその他の情報を取得できます。
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(); // 设置属性 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; } }
上記のコードにより、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()
を正常に呼び出すことができます。 。
概要:
Java リフレクションの 3 つの手法 (クラスの完全な情報の取得、オブジェクトの動的作成、プライベート メソッドの呼び出し) を通じて、実行時にクラスの関連情報を動的に取得できます。既存のコードを変更せずにクラスを操作します。これにより、柔軟性と拡張性が向上し、より効率的にコードを作成できるようになります。ただし、リフレクションを使用する場合は、安全性とパフォーマンスを確保するために注意する必要があります。
以上がJava リフレクション スキルを学ぶ 3 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。