如何调用存储在字符串变量中的 Java 方法

问题描述

首先,这与其他问题不同,因为表达式包含参数。

假设我们有这个方法

 public static int test(int x,Double y) {
    return somthing
}

我们有这样的字符串表达式:

 String expression = "test(1,2)";

那么我们如何运行这个表达式?

我想写一个带参数的方法并从表达式中调用它。

我找不到任何库来解决这个问题。

请帮忙

解决方法

您可以使用带有脚本语言(例如 JavaScript)的脚本引擎来处理您的表达式。

package expression;

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

public class App 
{
    public static void main( String[] args )
    {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");
        try {
            engine.eval("var test = Packages.expression.App.test");
            Object result = engine.eval("test(1,2)");
            System.out.println(result);
        } catch (ScriptException e) {
            //TODO: handle exception
            e.printStackTrace();
        }
    }

    public static int test(int x,Double y) {
        return x;
    }
}

"var test = Packages.expression.App.test" 为您的方法创建别名。

Object result = engine.eval("test(1,2)"); 调用您的方法。

您需要在 maven pom.xml 中包含以下依赖项:

<dependency>
  <groupId>org.openjdk.nashorn</groupId>
  <artifactId>nashorn-core</artifactId>
  <version>15.1</version>
</dependency>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...