java - jdk8中scriptmanager的返回值

标签 java java-8 eval

我一直在尝试下面的代码

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class ScriptCode {
    public static void main(String[] args) throws Exception{
        String code="";
        int y=-1;
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        code="if(a<b){return b;}else{return a;}";
        engine.put("a",10);
        engine.put("b",100);
        y=(int)engine.eval(code);
        System.out.println(y);
    }
}

我收到一条错误消息

Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>:1:8 Invalid return statement
if(a<b){return b;}else{return a;}

我无法解决这个问题。问题是在我的用例中,“code”变量将有一些规则,这些规则将返回一些内容。我知道如何在不返回的情况下执行此操作,但我无法从代码中返回某些值。我该怎么做?

最佳答案

您应该声明一个函数,然后执行它,以获得结果

engine.eval("function max(a,b) { if(a<b){return b;} return a;}");
engine.put("a",10);
engine.put("b",100);
int y = (int)engine.eval("max(a,b)"); // will return function result

或者将结果赋给一个变量,然后读取它

engine.put("a",10);
engine.put("b",100);
engine.eval("c= a<b? b: a;"); // assign result to a variable
int y = (int) engine.get("c"); // read the value

您遇到了错误,因为您的 return 语句不在任何函数内部,因此 return 无效。 eval 类似于任何浏览器中的开发人员工具控制台。您需要声明一个函数或一个变量。

关于java - jdk8中scriptmanager的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60612569/

相关文章:

javascript - 如何将 javascript 函数与 Eval 的 OnClientClick 事件绑定(bind)?

Python:Eval 在函数中给出 NameError

java - 有没有更好的方法来编写使用 Java 8 来填充 LinkedHashMap?

java - 有 Java Platform SE 8 所有类的类图吗?

php - 为什么这在 PHP 中不起作用?

java - 在 App Engine 上添加安全提供程序时出现 AccessControlException

java - 磁盘读取操作执行速度非常慢 | Java流

java - 如何编写一个常规的 equals() 方法,可能与 hashCode() 一起使用?

java - WebLogic 中未找到类异常,TomCat 中正常

java - java 注释等的用例