クラスオブジェクトを作成するには? 2 つの方法があります:
class.forName("class name");
Class a = a.class;
2 つの違いは次のとおりです: forName() は静的変数の初期化に役立ちます。静的変数を自分で初期化する必要があります。リフレクションを通じて、クラスをオブジェクトに変更するメソッドを実装できます。あるクラスは別の A クラスに属し、下方変換時の判定に使用されます。
クラス オブジェクトを通じて、次の情報を取得できます。 :
class.getConstructors(); すべてのコンストラクターを取得します。 class.getConstructor(null); これらのメソッドは、コンストラクター con を返します。コンストラクター; オブジェクトは con.newInstance("parameters"); を通じて作成できます。
class.getFields(); すべてのフィールドを取得します。 class.getField("name"); 特定のパブリック固有フィールド (name) を取得します。
set を使用してメンバー変数を設定します。 set(obj, "Andy Lau"); このうち、obj はクラスによって生成されたオブジェクトです。
class のすべての public メソッドを取得します。 ; すべてのメソッドを取得します;
class.getMethod("メソッド名", String.class); 次の String.class はメソッド オブジェクトを返します。フィールドと同様に、最初にオブジェクトを生成します。この場合、メソッド実行関数 invoke () を使用します。obj はオブジェクト、20 は main() を直接反映することもできます。メソッド; class.getMethod("main", Stirng[].class); リフレクションを通じて、それを元のベースで実装し、リフレクションを実装するためにプロパティを読み取り、新しいクラスを作成し、一般的なチェックを回避するためにメソッドを実行します。特定のコンテナのクラス ファイルを呼び出して、そのメソッドを呼び出して一般的なチェックを回避することもできます。
さらに、リフレクションを通じて動的プロキシ モードを実装することもできます。
interface Subject{ public void doSomething(); } class RealSubject implements Subject{ public void doSomething(){ System.out.println("call doSomething()"); } } class ProxyHandler implements InvocationHandler{ private Object tar; public Object bind(Object tar){ this.tar = tar; return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method ,Object[] args) throws Throwable{ Object result = null; result = method.invoke(tar,args); return result; } } public class Test { public static void main(String[] args[]){ ProxyHandler proxy = new ProxyHandler(); Subject sub = (Subject) proxy.bind(new RealSubject()); sub.doSomething(); } }
以上がJavaベースのリフレクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。