ホームページ > Java > &#&チュートリアル > Java 9 の InaccessibleObjectException を解決するにはどうすればよいですか?

Java 9 の InaccessibleObjectException を解決するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-27 02:49:14
オリジナル
598 人が閲覧しました

How Can I Resolve Java 9's InaccessibleObjectException?

Java 9 での InaccessibleObjectException への対処

InaccessibleObjectException は、Java 9 のさまざまなシナリオで発生します。多くの場合、これを利用するサードパーティのライブラリまたはフレームワークが関係します。リフレクションを使用して Java Development Kit (JDK) またはアプリケーション コードと対話します。この問題とその回避方法について説明します。

原因と影響

Java 9 ではモジュール システムが導入され、より強力なカプセル化制約が適用されました。要素 (クラス、メソッドなど) へのアクセスは、特定の基準が満たされない限り制限されます。これらの制限は、アクセス制限をバイパスしようとする setAccessible() などのリフレクション操作にも適用されます。

例外メッセージの内訳

例外メッセージは、重要な情報を提供します。

Unable to make {member} accessible: module {A} does not "opens {package}" to {B}
ログイン後にコピー
  • {A}: アクセスできないモジュール (例: java.base)
  • {member}: 指定されたアクセスできない要素 (defineClass メソッドなど)
  • {package}: アクセスできないことは、このパッケージ内の要素に適用されます (java.lang など)
  • {B}: 要求元のモジュール (通常は次のような名前のないモジュール) @1941a8ff)

解決戦略

シナリオに応じて、さまざまな戦略で問題を解決できます。主なケースは 2 つあります:

ケース 1: JDK へのリフレクション呼び出し

  • JDK の不変性のため、修正には JVM コマンドライン フラグが含まれます。
  • 開くには、構文 {A}/{package}={B} で --add-opens を使用します。リフレクション用の特定のパッケージ。

ケース 2: アプリケーション コードのリフレクション

  • アクセスできないモジュールを変更して内部を開くことができます。
  • モジュール記述子にエクスポート ディレクティブまたはオープン ディレクティブを適用してアクセシビリティを構成する制限事項。
  • オプションには、リクエストしているモジュールまたはすべてのコードに特定のパッケージをエクスポートするか開くことが含まれます。

追加の考慮事項

  • 特定のシナリオでは、複数の --add-opens フラグを適用する必要がある場合があります。
  • 最後の手段として、 --permit-illegal-access フラグ (Java 9 でのみ使用可能) を使用して、モジュール間の反射アクセスを有効にすることができます。ただし、これはセキュリティへの影響のため、一時的な解決策として扱う必要があります。

以上がJava 9 の InaccessibleObjectException を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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