如何调用存储在字符串变量中的 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>
首先,这与其他问题不相似,因为表达式包含参数。
假设我们有这个方法:
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>