У меня есть сценарий JavaScript, похожий на следующий
var base = 1
var next = myPackage.MyClass.getResult(base);
И следующий класс, определенный в пакете myPackage
public class MyClass{
public static getResult(final int base){
//Inner logic
return result; //Returns another class defined by me
}
Теперь метод eval(String script, Bindings n) ScriptEngine возвращает предположительно результат выполнения скрипта, например, где в примере
ScriptEngine engine;= new ScriptEngineManager().getEngineByName("nashorn");
bindings = new SimpleBindings();
engine.eval("1 + 1", bindings);
вызов eval возвращает 2, я решил, что можно сделать что-то подобное:
ScriptEngine engine;= new ScriptEngineManager().getEngineByName("nashorn");
bindings = new SimpleBindings();
String baseScript = "var base = 1; var result = myPackage.MyClass.getResult(base);"
String script = baseScript + "result.toString()";
Object result = engine.eval(script, bindings);
Но результат этого всегда равен нулю, хотя он правильно оценивает метод getResult(base) (если я помещаю внутри точку останова, я могу определить, что вызов выполнен и логика выполнена правильно).
Почему результат всегда равен нулю и как это следует делать правильно?
Изменить: пример полного кода:
public class Main {
public static void main (String[] args) throws java.lang.Exception
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
SimpleBindings bindings = new SimpleBindings();
String baseScript = "var base = 1; var result = Packages.myPackage.MyClass.getResult(base);";
String script = baseScript + "result.toString()";
Object result = engine.eval(script, bindings);
System.out.println(result);
}
}
package myPackage;
public class MyClass
{
public static MyClass.ResultClass getResult(final int base) {
return new MyClass.ResultClass().setString(base);
}
public static class ResultClass{
private String str;
public MyClass.ResultClass setString(int val){
if(val < 10) {str = String.valueOf(val);}
else str = "0";
return this;
}
public String getString(){
return str;
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/460 ... th-nashorn