このプロジェクトでは、Rhino で javax.scripting を利用しています。
Java オブジェクト (Double、Long、Integer など) を返す Java メソッドがあります。そのメソッドを JavaScript から呼び出し、その結果を Javascript プリミティブ型として参照したいと考えています。ただし、javacript は戻り値の型を Object として認識します。
javascriptプリミティブに強制的に変換するにはどうすればよいですか?
この質問はhttp://groups.google.com/group/mozilla.dev.tech.js-engine.rhino/browse_thread/thread/2f3d43bb49d5288a/dde79e1aa72e1301とよく似てい ます
問題は、コンテキストと WrapFactory への参照を取得する方法です。
サンプルコード:
public class data
{
Double value = 1.0d;
public Number get() { return value; }
}
public static void main(String[] args)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName ("rhino");
data data = new data();
try
{
engine.eval("function test(data) { return data.getD('value1') + 5;};");
System.out.println("Result:" + ((Invocable)engine).invokeFunction("test", data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
出力: 結果: 15