リフレクション メカニズムを使用すると、プログラムは実行時にクラス情報を取得および変更できます。これを使用して、インターフェイスおよび抽象クラスのリフレクションを実装できます。 インターフェイス リフレクション: Class.forName() を通じてインターフェイス リフレクション オブジェクトを取得し、そのメタデータにアクセスします。名前、メソッド、フィールド)。抽象クラスのリフレクション: インターフェイスと同様に、抽象クラスのリフレクション オブジェクトを取得し、そのメタデータと非抽象メソッドにアクセスできます。実際のケース: リフレクション メカニズムを使用すると、動的プロキシを実装し、プロキシ クラスを動的に作成することで実行時にインターフェイス メソッドへの呼び出しをインターセプトできます。
Java でのインターフェイスと抽象クラスのリフレクション メカニズムの実装
リフレクション メカニズムは、Java プログラミング言語の機能であり、プログラム 実行時にクラス情報を取得および変更します。インターフェイスや抽象クラスのリフレクションを実装するために使用できます。
インターフェイスのリフレクション
インターフェイスのリフレクション オブジェクトを取得するには、Class.forName()
メソッドを使用できます:
Class<?> interfaceClass = Class.forName("com.example.MyInterface");
インターフェイスのリフレクション オブジェクトを通じて、名前、メソッド、フィールドなどのインターフェイスのメタデータにアクセスできます。
System.out.println("Interface name: " + interfaceClass.getName()); // 获取接口的所有方法 Method[] methods = interfaceClass.getMethods(); for (Method method : methods) { System.out.println("Interface method: " + method.getName()); }
抽象クラスのリフレクション
インターフェイスと同様に、Class.forName()
メソッドを使用して抽象クラスのリフレクション オブジェクトを取得することもできます。
Class<?> abstractClass = Class.forName("com.example.MyAbstractClass");
抽象クラスの場合、そのメタデータと非オブジェクトにアクセスできます。 -抽象メソッド:
System.out.println("Abstract class name: " + abstractClass.getName()); // 获取抽象类的所有方法 Method[] methods = abstractClass.getMethods(); for (Method method : methods) { if (!method.isAbstract()) { System.out.println("Non-abstract method in abstract class: " + method.getName()); } }
実際のケース: 動的プロキシ
リフレクション メカニズムを使用して動的プロキシを実装できます。このパターンでは、事前にクラスを定義しなくても、実行時にクラスのプロキシを作成できます。
// 为 MyInterface 创建一个动态代理 InvocationHandler handler = new MyInvocationHandler(); Class<?> proxyClass = Proxy.getProxyClass(interfaceClass, handler); MyInterface proxy = (MyInterface) proxyClass.newInstance(); // 使用代理调用接口方法 proxy.someMethod();
MyInvocationHandler
では、必要に応じて invoke()## を実装できます。インターフェースメソッドへの呼び出しをインターセプトします。
以上がJava でのインターフェイスと抽象クラスのリフレクション メカニズムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。