Java 言語はオブジェクト指向プログラミング言語であり、優れたクロスプラットフォームと容易なメンテナンスという利点があります。 Java 言語のリフレクション メカニズムは Java 言語の重要な機能であり、プログラムが実行時に特定のクラスに関する情報を動的に取得し、そのクラスが提供するメソッドと属性を使用できるようにすることで、プログラムのスケーラビリティと柔軟性が向上します。この記事ではJava言語リフレクションの使い方を紹介します。
リフレクション メカニズムは Java 言語の動的メカニズムであり、プログラマがコードを記述するときに、クラス コンストラクター、メソッド、プロパティなどのクラス情報を動的に取得できるようになります。 Java 言語のリフレクション機構は主に、クラス、コンストラクター、メソッドの 3 つのクラスで構成されます。このうち、Classはクラスの型を表し、Constructorはクラスのコンストラクタを表し、Methodはクラスのメソッドを表します。
Class クラス オブジェクトを通じて、クラス名、親クラス、インターフェイス、コンストラクター メソッド、メンバー メソッド、メンバー属性、アノテーションなどを含むクラスの完全な情報を取得できます。たとえば、次のコードは、クラスのクラス名と親クラス名を取得する方法を示しています。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static void main(String[] args) { Class<Person> pClass = Person.class; System.out.println("类名:" + pClass.getName()); System.out.println("父类名:" + pClass.getSuperclass().getName()); } }
上記のコードでは、Person.class## を通じて Person クラスの
を取得します。 # Class 型の場合、
getName() メソッドを使用してクラスの名前を取得し、
getSuperClass() メソッドを使用してクラスの親クラスを取得します。 、最後にクラス名と親クラス名を出力します。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void sayHello() { System.out.println("Hello, my name is " + name); } } public class Main { public static void main(String[] args) throws Exception { Class<Person> pClass = Person.class; // 获取所有构造器 Constructor<?>[] constructors = pClass.getDeclaredConstructors(); // 获取指定的构造器 Constructor<?> constructor = pClass.getDeclaredConstructor(String.class, int.class); // 新建对象 Person person = (Person) constructor.newInstance("Tom", 20); // 获取所有成员变量 Field[] fields = pClass.getDeclaredFields(); // 获取指定的成员变量 Field field = pClass.getDeclaredField("name"); // 修改成员变量的值 field.setAccessible(true); field.set(person, "Jerry"); // 获取所有成员方法 Method[] methods = pClass.getDeclaredMethods(); // 获取指定的成员方法 Method method = pClass.getDeclaredMethod("sayHello"); // 调用成员方法 method.invoke(person); } }上記のコードでは、
getDeclaredConstructors() メソッドを使用して、次に、
getDeclaredConstructor(String.class, int.class) を使用して指定されたコンストラクターを取得し、
newInstance() メソッドを使用して新しいオブジェクトを作成します。次に、
getDeclaredFields() メソッドを使用して Person クラスのすべてのメンバー変数を取得し、
getDeclaredField("name") メソッドを使用して指定されたメンバー変数を取得し、# を使用します。 ##setAccessible( true)
メソッドはプライベート メンバー変数を呼び出します。最後に、getDeclaredMethods()
メソッドを使用して Person クラスのすべてのメンバー メソッドを取得し、getDeclaredMethod("sayHello")
メソッドを使用して指定されたメンバー メソッドを取得し、# を使用します。 ##invoke( ) メソッドはメンバー メソッドを呼び出します。
リフレクション機構を使用する場合は、次の点に注意する必要があります。
リフレクション機構は実行時にクラス情報を取得する必要があるため、パフォーマンスが低くなります。コンパイル時には必要ありません。情報はすでに決定されているため、リフレクション メカニズムは可能な限り回避する必要があります。
以上がJava言語リフレクションの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。