JSR223を使ってJavaからJavaScriptを実行する時にJavaのクラスを利用する

JSR223スクリプト言語サポートでは、JavaScriptなどのスクリプト言語Javaから利用するためのAPIを提供しています。Java6ではJavaScriptRhino)がサポートされており、ライブラリを使えばJRubyJythonなどが利用できます。
利用方法は簡単です。

    public static void eval(String script) throws ScriptException {
        ScriptEngineManager mng = new ScriptEngineManager();
        ScriptEngine engine = mng.getEngineByName("javascript");
        engine.eval(script);
    }

例えばScriptはこんな感じ。

print("Hello World.");

さらに、JavaScriptの中でJavaのクラスを使う事もできます。

var now = new java.util.Date();
print(now);

これを使えばFile IOなども記述できます。

ところが・・・

new java.io.File("hoge").delete();

のようにファイルを削除しようとすると次のような例外がthrowされます。

sun.org.mozilla.javascript.internal.EvaluatorException: missing name after . operator

javascriptではdeleteは予約語なので、deleteメソッドが気にくわないのでしょう。

解決方法はこうでした。

new java.io.File("hoge")["delete"]();

参考:http://www.mail-archive.com/dev-tech-js-engine-rhino@lists.mozilla.org/msg01258.html