ホームページ > Java > &#&チュートリアル > Java リフレクションを使用してプライベート メソッドを呼び出すにはどうすればよいですか?

Java リフレクションを使用してプライベート メソッドを呼び出すにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-08 03:57:02
オリジナル
845 人が閲覧しました

How Can I Invoke Private Methods Using Java Reflection?

リフレクションによるプライベート メソッドの呼び出し

リフレクションを検討している開発者は、プライベート メソッドへのアクセスが必要なシナリオに遭遇することがよくあります。 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;

// Use getDeclaredMethod to include both private and inherited methods
Method method = object.getClass().getDeclaredMethod(methodName);

// Enable access to the private method using setAccessible
method.setAccessible(true);

// Invoke the method and store the result
Object r = method.invoke(object);
ログイン後にコピー

注意事項:

  • getDeclaredMethod は、継承されたメソッドではなく、現在のクラス内で宣言されたメソッドのみを取得します。
  • SecurityManager は setAccessible の使用を制限する場合があります。

代替アプローチ:

メソッドのアクセシビリティを変更する場合、または PrivilegedAction を実装する場合 (以下で提案されているように)提供された回答) は実現不可能です。次の代替案を検討してください。

  • プライベート メソッドの機能を間接的に公開する getter メソッドを使用します。
  • を宣言するパブリック インターフェイスまたは抽象クラスを作成します。 private メソッドを作成し、実装クラスでそれをオーバーライドします。

以上がJava リフレクションを使用してプライベート メソッドを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート