リフレクションによるプライベート メソッド呼び出し
Java では、プライベート メソッドの直接リフレクション呼び出しは許可されていません。ただし、この機能を実現する別のアプローチもあります。
最初にプライベートとして定義されたメソッドをリフレクションを通じて呼び出す必要がある次のシナリオを考えてみましょう。
Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null);
このコードは、次のことを試みます。 「methodName」属性で指定されたプライベート メソッドへの参照を取得します。ただし、プライベート メソッドには従来のリフレクションではアクセスできないため、このアプローチでは「NoSuchMethodException」がトリガーされます。
この制限を克服するには、getDeclaredMethod メソッドを利用できます。
Method method = object.getClass().getDeclaredMethod(methodName); method.setAccessible(true); Object r = method.invoke(object);
getDeclaredMethod メソッドは、可視性に関係なくメソッドを使用します。 setAccessible メソッドを使用すると、プライベート アクセス制限を回避してメソッドを呼び出すことができます。
注意:
以上がJava でリフレクションを使用してプライベート メソッドを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。