Java のリフレクション関数は、クラス情報を取得し、実行時に動的に変更できる高度なプログラミング テクノロジです。リフレクション関数を使用すると、クラスに関する完全な情報を知らなくても、そのオブジェクトと、それらが属するクラスのプロパティとメソッドを使用できます。この記事では、Java の Reflection 関数を使用してリフレクション操作を実行する方法を学びます。
1. リフレクション メカニズムの基本概念
リフレクション メカニズムとは、プログラミング プロセス中にクラス ファイル (.class ファイル) の情報を動的に取得するメカニズムを指します。これにより、クラス メソッド、プロパティ、コンストラクターの読み取り、メソッドの取得と呼び出しなど、実行時にこれらのクラス ファイル情報を操作できるようになります。
一般に、リフレクション メカニズムは、Java プログラミング言語が実行時にオブジェクトの型を決定することにより、実行時にオブジェクトが属するクラスを確認し、その特性と動作を分析できるようにします。
リフレクション メカニズムの主な利点は、実際のクラスに関する完全な情報を知らなくても、すべての Java クラスに適用できる汎用コードを実装できることです。これにより、プログラマはリフレクションを通じてクラス内のオブジェクト、プロパティ、メソッドを作成、解析、使用できるようになります。
2. Class オブジェクトの取得
リフレクションの最初のステップは、クラスの Class オブジェクトを取得することであり、これは次の 3 つの方法で実現できます。 ##Use Class. forName() メソッドは
Class clazz = Class.forName("java.lang.String");
クラス名を直接使用します。class キーワードを取得するには、
Class clazz = String.class;
オブジェクトの getClass() メソッドを通じて取得します。
String str = "Hello, World!"; Class clazz = str.getClass();
クラスのすべてのコンストラクターを取得します
Constructor[] constructors = clazz.getDeclaredConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); }
Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { System.out.println(method); }
Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { System.out.println(field); }
リフレクションを使用したオブジェクトの作成
Class clazz = Class.forName("java.lang.String"); Constructor constructor = clazz.getDeclaredConstructor(String.class); String str = (String) constructor.newInstance("Hello, World!");
リフレクションを使用してクラスのメソッドを呼び出す
Class clazz = Class.forName("java.lang.String"); Method method = clazz.getDeclaredMethod("charAt", int.class); char c = (char) method.invoke("Hello, World!", 1);
リフレクションを使用してクラスの属性を読み取り、変更します
Class clazz = Class.forName("java.lang.String"); Field field = clazz.getDeclaredField("value"); field.setAccessible(true); //设置私有属性可读写 String str = "Hello, World!"; char[] chars = (char[]) field.get(str); chars[0] = 'h'; System.out.println(str); //输出: hello, World!
以上がJava で Reflection 関数を使用してリフレクション操作を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。