@Deprecated(since="11", forRemoval=true)

モジュール jdk.scripting.nashorn

非推奨、削除予定: このAPI要素は将来のバージョンで削除予定です。
Nashorn JavaScriptスクリプト・エンジンとAPIおよびjjsツールは、将来のリリースでこれらを削除する目的で非推奨になりました。
Nashornスクリプト・エンジンの実装と、ECMAScript 5.1で記述されたプログラムの実行時環境を提供します。

Nashornは、ECMAScript 5.1で記述されたプログラムの実行時環境です。

使用方法

Nashornを使用する推奨方法は、javax.scriptパッケージにあるJSR-223 "Scripting for the Java Platform" APIを使用することです。 通常、次のものを使用してNashornのScriptEngineインスタンスを取得します。
import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn");
その後、他のJSR-223スクリプト・エンジンと同じように使用します。 詳細は、jdk.nashorn.api.scriptingパッケージを参照してください。

互換性

Nashornは、ECMA-262 Standard、 Edition 5.1に100%準拠しています。 これには、JSR-292 "Supporting Dynamically Typed Languages on the Java Platform"仕様(通常は「invokedynamic」と呼びます)および前述のJSR-223を実装するJava Virtual Machineが必要です。

Javaプラットフォームとの相互運用性

Nashornは、100%のECMAScript 5.1ランタイムであることに加えて、ECMAScriptプログラムをJavaプラットフォームと相互運用するための機能を提供します。 一般に、スクリプト・エンジンのコンテキストに配置されたJavaオブジェクトは、スクリプトから参照できます。 標準的には、このようなJavaオブジェクトは、4.3.8項で定義されているように、「ネイティブ・オブジェクト」ではなく「ホスト・オブジェクト」とみなされます。 この区別により、ネイティブ・オブジェクトと比較して、処理に意味的な違いがある場合があります。 ほとんどの場合、Javaオブジェクトはネイティブ・オブジェクトと同様に動作します。メソッドの起動、プロパティの取得および設定が可能です。 ただし、ほとんどの場合、任意のプロパティを追加したり、既存のプロパティを削除したりすることはできません。

Javaコレクション処理

ネイティブJava配列およびListでは、プロパティ・アクセッサを介した要素への索引付きアクセスがサポートされ、Mapでは、ドット・プロパティ・アクセッサと平方ブラケット・プロパティ・アクセッサの両方を介したプロパティ・アクセスと要素アクセスの両方がサポートされます。違いは、ドット演算子がオブジェクト・プロパティ(getXxxおよびsetXxxメソッドとして定義されたフィールドおよびプロパティ)を優先し、角カッコ演算子が要素をマップする優先を与える点です。 ネイティブJava配列は、lengthプロパティを公開します。

ECMAScriptプリミティブ型

数値、文字列およびブールに対するECMAScriptプリミティブ型は、NumberCharSequenceおよびBooleanオブジェクトで表されます。 最もよく使用される数値型はDoubleで、最もよく使用される文字列型はStringですが、様々な内部最適化によってNumberの他のサブクラスやCharSequenceの内部実装が使用されるため、この型に依存しないでください。

型変換

Javaオブジェクトのメソッドが呼び出されると、許可されるすべてのECMAScript変換を使用して、引数がJavaメソッドの仮パラメータ型に変換されます。 これは、一般に、Standardのセクション9.3 "ToNumber"などに従って、stringからnumberへの変換が成功する可能性があります。stringからboolean、numberからboolean、Objectからnumber、Objectからstringまでのすべての作業です。 Javaメソッドの宣言されたパラメータ型がjava.lang.Objectの場合、Nashornオブジェクトは変換なしで渡されることに注意してください。特に、渡されるJavaScript値がプリミティブ文字列型の場合、java.lang.CharSequenceのみに依存でき、値が数値の場合、java.lang.Numberのみに依存できます。 Javaメソッドの宣言されたパラメータ型がより具体的(java.lang.Stringjava.lang.Doubleなど)である場合、Nashornはもちろん、必要な型が渡されることを確認します。

SAMタイプ

Javaメソッドを呼び出す際の特別な拡張機能として、Java型がいわゆる「単一抽象メソッド」または「SAM」型である引数のかわりに、ECMAScriptファンクション・オブジェクトを渡すことができます。 通常、この名前は単一メソッド・インタフェースを対象としていますが、Nashornは少し汎用性が高く、すべての抽象メソッドが同じ名前のオーバーロードであり、インタフェースであるか、引数なしコンストラクタを持つ抽象クラスである場合、型をSAM型として認識します。 型自体はpublicである必要がありますが、コンストラクタおよびメソッドはpublicまたはprotectedのいずれかです。 同じ名前の抽象オーバーロードが複数ある場合、単一の関数はすべての関数に対して共有実装として機能し、さらに同じ名前の非抽象メソッドもオーバーライドします これは、ECMAScriptにオーバーロードされたメソッドの概念がないという事実と一致するように行われます。

Javaオブジェクト

Nashornは、Javaプラットフォーム固有の機能への主要なAPIエントリ・ポイントであるJavaという名前の非標準グローバル・オブジェクトを公開します。 これを使用して、Javaクラスのインスタンスの作成、Java配列からネイティブ配列への変換などを行うことができます。

その他の非標準の組込みオブジェクト

Nashornは、Javaに加えて、JSAdapterJavaImporterPackagesなど、その他の非標準の組込みオブジェクトも公開します。
モジュール・グラフ:
jdk.scripting.nashornのモジュール・グラフjdk.scripting.nashornのモジュール・グラフ
導入されたバージョン:
9