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

How to call Java method that stored in string variable

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

假设我们有这个方法:

 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>