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
オプション)で使用可能です: java
、javafx
、javax
、com
、org
、edu
。
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
オプション)でのみ使用できます。