@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 "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 "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プリミティブ型

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

型変換

Javaオブジェクトのメソッドが呼び出されると、引数はすべての許可されたECMAScript変換を使用してJavaメソッドの仮パラメータ型に変換されます。 一般的に、文字列から数字への変換は、標準セクション9.3 "ToNumber"などに従って成功するでしょう。これは驚くべきことです。文字列をブール値に、数値をブール値に、オブジェクトを数値に、オブジェクトをすべて文字列に変換します。 宣言されたJavaメソッドのパラメータ型がjava.lang.Objectである場合、Nashornオブジェクトは何も変換せずに渡されます。具体的には、渡されるJavaScriptの値がプリミティブな文字列型の場合は、java.lang.CharSequenceのみに依存することができます。値が数値の場合は、java.lang.Numberにのみ依存できます。 Javaのメソッド宣言されたパラメータの型がより具体的な(例えばjava.lang.Stringまたはjava.lang.Double)である場合、Nashornはもちろん必要な型が渡されることを保証します。

SAM型

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

Javaオブジェクト

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

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

Javaに加えて、Nashornは標準以外の組み込みオブジェクトも公開しています: JSAdapter, JavaImporter, Packages
モジュール・グラフ:
jdk.scripting.nashornのモジュール・グラフjdk.scripting.nashornのモジュール・グラフ
導入されたバージョン:
9