ホームページ >Java >&#&チュートリアル >Java 9 の不正なリフレクティブ アクセスとは何ですか?また、それを修正するにはどうすればよいですか?

Java 9 の不正なリフレクティブ アクセスとは何ですか?また、それを修正するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-05 03:07:13218ブラウズ

What is Illegal Reflective Access in Java 9 and How Can I Fix It?

Java 9 での不正なリフレクティブ アクセス

Java 9 でのモジュール性の導入後、開発者は不正なリフレクティブ アクセスに関連する問題に遭遇しました。この概念を完全に理解するには、まずモジュール システムの「緩和された強いカプセル化」を理解することが不可欠です。

不正なリフレクティブ アクセスの定義

不正なリフレクティブ アクセスとは、以下を指します。モジュール設計原則で意図されていない方法で反射操作が実行される状況。これは、モジュールとそのパッケージの間に確立されたカプセル化バリアに違反します。

警告がトリガーされる状況

不正な反射アクセスに対する警告は、次の場合にトリガーされます。

  • モジュールが、適切なモジュール宣言または VM 引数を使用せずに、別のモジュールの内部パッケージにアクセスする(例: --add-opens)。
  • コンパイルされたコードは内部 JDK API にアクセスします。

カプセル原則の緩和

Java 9移行を支援するために、デフォルト設定が許可の --illegal-access ランチャー オプションを導入しました。許可モードの場合:

  • パッケージへの最初の不正なリフレクション アクセス操作では警告が生成されます。
  • その後の操作では警告はトリガーされません。

構成モード

--illegal-access オプションは次のとおりです。さまざまなモードで構成されています:

  • debug: 不正なアクセスごとに警告とスタックトレースを提供します。
  • warn: 不正なアクセスごとに警告を発行します。
  • deny: 不正なアクセスを禁止します。アクセス操作。

識別方法と修正

不正な反射アクセスを回避するために、開発者は次のことができます:

  • --illegal-access=deny を指定してアプリケーションを実行し、不正なアクセスを検出します。
  • 特定jdeps ツールを使用した JDK API への静的参照 (--jdk-internals を使用)オプション)。

警告メッセージ

不正なリフレクション アクセス操作により、次の形式の警告が表示されます:

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM

ここで:

  • $PERPETRATOR: リフレクティブを呼び出したタイプ操作
  • $VICTIM: アクセス中のメンバー

将来の互換性の確保

将来の互換性を確保するには、不正な反射アクセスを排除し、モジュールが適切なカプセル化原則に従っていることを確認します。

以上がJava 9 の不正なリフレクティブ アクセスとは何ですか?また、それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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