RhinoからGraalJSへの移行ガイド

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

RhinoとGraalJSはどちらも、Java相互運用性について同様の構文とセマンティクスをサポートしています。移行に関連する最も重要な違いを以下に示します。

java.a.b.c.typenameの代わりにJava.type(typename) #

GraalJSは、使用可能なJavaクラスをJavaScriptスコープに配置しません。Java.type(typename)を使用してクラスを明示的にロードする必要があります。

GraalJSはグローバルオブジェクトPackagesをサポートしますが、クラスを明示的にロードすることをお勧めします。次のJavaパッケージグローバルは、Nashorn互換モード(js.nashorn-compatオプション)で使用できます:javajavafxjavaxcomorgedu

JavaクラスとJavaオブジェクトのコンソール出力 #

GraalJSはビルトイン関数printを提供します。最も有用な出力を提供するために、JavaクラスとJavaオブジェクトの動作を特別に処理しようとします。

GraalJSはconsole.log関数も提供することに注意してください。これは、純粋なJavaScriptモードではprintのエイリアスですが、ノードモードではNode.jsによって提供される実装を使用します。インターオプオブジェクトに関する動作は、ノードモードのconsole.logでは異なります。これは、そのようなオブジェクトの特別な処理を実装していないためです。

JavaScriptとJavaの文字列 #

GraalJSは、内部的にJava文字列を使用してJavaScript文字列を表します。これにより、特定の文字列がJavaScriptコードによって作成されたのか、Javaコードによって作成されたのかを区別することが不可能になります。GraalJSでは、JavaScriptのプロパティはJavaのフィールドやメソッドよりも優先されます。たとえば、lengthプロパティ(JavaScriptの)をクエリできますが、JavaScript文字列に対してlength関数(Javaの)を呼び出すことはできません。lengthは関数ではなくデータプロパティのように動作します。

JavaImporter #

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

お問い合わせ