我有一个具有两个方法的JAVA类。第一个是主要方法,第二个是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(); Mapmap = new HashMap (); 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