Javaメソッドを公開して、任意のスクリプトで呼び出せるようにしたい。スクリプトは、戻り値に対して算術演算を実行できる必要があります。Rhino:JavaScriptから呼び出されるJavaメソッドから整数を返す方法は?
公開されたメソッドはJava Integer
を返しますが、スクリプトは実際には通常の数値ではなく、org.mozilla.javascript.NativeJavaObject
のインスタンスを取得するという問題があります。ここ
の挙動を示し、いくつかの単純化されたテストコードである:
public class RhinoTest
{
public static void main(String[] args)
{
String script = "foo.getBar() + 1";
Context context = Context.enter();
ScriptableObject scriptableObject = context.initStandardObjects();
ScriptableObject.putProperty(scriptableObject, "foo", new Foo());
Object result = context.evaluateString(scriptableObject, script, "FooBar", 1, null);
Context.exit();
System.out.println(result);
}
public static class Foo
{
public Integer getBar()
{
return 9;
}
}
}
期待される結果は10
あるが、スクリプトは91
を返します。
したがって、スクリプト内で発生したgetBar()
コールは、実際には通常のJavascriptデータ型を返します。 unwrap()
コール、などを追加してスクリプトコードを変更したくないことに注意してください。
試し '¨foo.getBar()' + 1 – subodh