制限付きメソッド

Java SE APIの様々なメソッドを使用すると、Javaコードは、ランタイムがリソースの正しい使用または安全な使用を証明できないように、Javaランタイム外のリソースと相互運用できます。 これらのメソッドは、誤って使用された場合、Java Virtual Machineの整合性に違反する可能性がありますが、必須機能を提供するため、条件付きでユーザーが使用できるようになります。 「制限されたメソッド」と呼ばれます。

制限されたメソッドの潜在的危険性を考えると、制限されたメソッドが呼び出されるたびに、Javaランタイムは標準エラー・ストリームで警告を発行します。 このような警告は、選択したモジュールに制限されたメソッドへのアクセス権を付与することによって無効にできます。 これは、実装固有のコマンドライン・オプションを使用するか、ModuleLayer.Controller.enableNativeAccess(java.lang.Module)を呼び出すなどしてプログラムで実行できます。

制限付きメソッドが「JNIコード」によって呼び出された場合、または「アップ・コール・スタブ」から呼び出され、スタック上に呼び出し元クラスがない場合、制限付きメソッド呼び出しが「名前のないモジュール」で発生したかのようになります。

リファレンス実装では、コマンドライン・オプション--enable-native-access=M1,M2, ... Mnを使用して、制限付きメソッドへのアクセスを特定のモジュールに付与できます。M1, M2, ... Mnはモジュール名(名前のないモジュールの場合、特殊な値ALL-UNNAMEDを使用できます)です。 そのオプションによってリストされていないモジュールからの制限付きメソッドへのアクセスは、illegalとみなされます。 クライアントは、コマンドライン・オプション--illegal-native-accessを使用して、制限されたメソッドへのアクセスの処理方法を制御できます。 このオプションを指定しない場合、制限されたメソッドへの不正なアクセスによって実行時警告が発生します。