RhinoからGraalVM JavaScriptへの移行ガイド

このドキュメントは、以前はRhinoエンジンをターゲットとしていたコードの移行ガイドです。サポートされている機能の概要は、「Javaの相互運用性」ガイドを参照してください。

RhinoとGraalVM JavaScriptの両方で、Java相互運用のために、類似する一連の構文およびセマンティクスがサポートされています。移行に関連する最も重要な相違点を次に示します。

java.a.b.c.typenameではなくJava.type(typename)

GraalVM JavaScriptでは、使用可能なJavaクラスがJavaScriptのスコープに配置されません。Java.type(typename)を使用して、クラスを明示的にロードする必要があります。GraalVM JavaScriptではPackagesグローバル・オブジェクトがサポートされますが、それでもクラスを明示的にロードすることをお薦めします。次のJavaパッケージ・グローバルがNashorn互換性モード(js.nashorn-compatオプション)で使用可能です: javajavafxjavaxcomorgedu

JavaクラスおよびJavaオブジェクトのコンソール出力

GraalVM JavaScriptには、print組込み関数が用意されています。これは、最も有用な出力を提供するために、JavaクラスおよびJavaオブジェクトに対する動作を特別なケースとして処理することを試みます。

GraalVM JavaScriptには、console.log関数も用意されています。これは純粋なJavaScriptモードでのprintの別名ですが、Nodeモードの場合はNode.jsによって提供される実装を使用します。Nodeモードのconsole.logでは、相互運用オブジェクトに対する特別な処理が実装されていないため、そのようなオブジェクトに関する動作は異なります。

JavaScriptとJava文字列

GraalVM JavaScriptでは、内部的にJava文字列を使用してJavaScriptの文字列を表します。そのため、特定の文字列がJavaScriptによって作成されたかJavaコードによって作成されたかを区別できません。GraalVM JavaScriptでは、JavaScriptのプロパティがJavaのフィールドまたはメソッドよりも優先されます。たとえば、(JavaScriptの) lengthプロパティを問い合せることはできますが、JavaScriptの文字列に対して(Javaの)length関数をコールすることはできず、lengthは関数のようにではなくデータ・プロパティのように動作します。

JavaImporter

JavaImporter機能は、Nashorn互換性モード(js.nashorn-compatオプション)でのみ使用できます。