ホームページ  >  記事  >  Java  >  アクセス制限があるにもかかわらず、Java でリフレクションを使用してプライベート メソッドを呼び出すにはどうすればよいですか?

アクセス制限があるにもかかわらず、Java でリフレクションを使用してプライベート メソッドを呼び出すにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-08 22:22:02454ブラウズ

How Can I Invoke Private Methods Using Reflection in Java Despite Access Restrictions?

リフレクションを利用したプライベート メソッドの呼び出し

リフレクションによるプライベート メソッドへのアクセスに対する Java の制限にもかかわらず、この制限を克服するソリューションが存在します。リフレクション経由でプライベート メソッドを呼び出すには、次のアプローチを利用できます。

まず、getMethod(String methodName) の代わりに getDeclaredMethod(String methodName) を使用して プライベート メソッド を取得します。このメソッドにより、現在のクラス内で宣言されたパブリック メソッドとプライベート メソッドの両方にアクセスできます。

次に、プライベート メソッドに対するデフォルトのアクセス制限を回避するには、setAccessible(boolean unavailable) メソッドを使用してアクセシビリティを付与します。 accessible を true に設定すると、保護設定がオーバーライドされ、プライベート メソッドの呼び出しが許可されます。

最後に、目的のオブジェクトと必要なオブジェクトを指定して invoke(Object object, Object... args) を使用してプライベート メソッドを呼び出します。 argument.

これは、オリジナルで提供されているコードの更新バージョンです。質問:

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);

警告:

  • getDeclaredMethod は、継承されたメソッドではなく、現在のクラス内で宣言されたメソッドへのアクセスを制限します。継承されたメソッドでは、具体的なクラス階層をたどる必要があります。
  • SecurityManager により、setAccessible の使用が妨げられる可能性があります。このような場合は、AccessController または Subject.
を利用してコードを PrivilegedAction として実行することを検討してください。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。