Вот пример того, как вернуть значения из сложного типа:
String strFunction =
"function add(x,y){ " +
"return { " +
"id:x+y " +
"}; " +
"}";
Context context = Context.enter();
ScriptableObject scope = context.initStandardObjects();
context.evaluateString(scope, strFunction, "test", 1, null);
Function functionAdd = (Function)scope.get("add");
NativeObject untypedResult = (NativeObject)functionAdd.call(context, scope, scope, new Object[] { 1, 2 });
double id = (Double)untypedResult.get("id", untypedResult);
Важной частью являются последние две строки, где мы вызываем функцию JavaScript, обрабатываем результат как NativeObject, а затемполучить значение свойства id из этого объекта.