gpt4 book ai didi

mvel - 如何从 MVEL 表达式中调用外部方法?

转载 作者:行者123 更新时间:2023-12-02 01:25:11 24 4
gpt4 key购买 nike

我有一个 JAVA 类,它有两个方法。第一个是 main 方法,第二个是 method1()。

假设以下是该类:

public class SomeClass() {
public static void main(String[] args){
MVEL.eval("System.out.println(\"I am inside main method\");method1();");
}
public static void method1(){
System.out.println("I am inside method 1");
}
}

现在,当我运行该程序时,我得到以下输出:-

我在主方法内

Exception in thread "main" [Error: no such method or function: method1]
[Near : ... main method"); method1(); ..}]
^
[Line: 1, Column: 184]
at org.mvel2.PropertyAccessor.getMethod(PropertyAccessor.java:898)
at org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:182)
at org.mvel2.PropertyAccessor.get(PropertyAccessor.java:146)
at org.mvel2.PropertyAccessor.get(PropertyAccessor.java:126)
at org.mvel2.ast.ASTNode.getReducedValue(ASTNode.java:187)
at org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:106)
at org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:49)
at org.mvel2.MVEL.eval(MVEL.java:136)
at mypackage.SomeClass.main(SomeClass.java:15)

正如你所看到的,它打印了第一个sop,但是当调用method1时,它抛出异常。

有办法解决这个问题吗?

最佳答案

您需要在通过 MVEL 求值时传递类对象。

1.) SomeClass 已创建

2.) map.put("obj", myObj); 添加到 HashMap

3.) MVEL.eval(exp,map) 需要评估

public static void main(String[] args) {
SomeClass myObj = new SomeClass();
Map<String,Object> map = new HashMap<String,Object>();
map.put("obj", myObj);
MVEL.eval("System.out.println(\"I am inside main method\");obj.method1();",map);
}

public static void method1() {
System.out.println("I am inside method 1");
}

输出

I am inside main method
I am inside method 1

关于mvel - 如何从 MVEL 表达式中调用外部方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34086918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com