如何将参数传递给 MVEL 表达式中编写的函数?
How to pass arguments to a function written inside an MVEL expression?
我有一个 JAVA class 有两种方法。第一个是main方法,第二个是method1()。
假设以下是 class:
public class SomeClass() {
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(List<String> listOfStrings){
System.out.println("I am inside method 1");
}
}
现在您可以在表达式中看到,要调用方法 1,我需要传递一个列表作为参数。怎么做?表达式中需要进行哪些更改?如果我想在我的程序中传递动态参数怎么办?
您可以创建一个 List
或将其作为参数来自其他来源。
Only thing you need to take care is to put inside the map
object,
which used by MVEL
for evaluation.
需要按上述方式传递列表 -> obj.method1(myList);
下面的工作代码
public class SomeClass {
public static void main(String[] args) {
SomeClass myObj = new SomeClass();
Map<String, Object> map = new HashMap<String, Object>();
map.put("obj", myObj);
List<String> listOfStrings = new ArrayList<String>();
listOfStrings.add("my ");
listOfStrings.add("List ");
listOfStrings.add("is printing");
map.put("obj", myObj);
map.put("myList", listOfStrings);
MVEL.eval("System.out.println(\"I am inside main method\");obj.method1(myList);",map);
}
public static void method1(List<String> listOfStrings) {
System.out.println("I am inside method 1");
for (String s : listOfStrings) {
System.out.print(s);
}
}
}
输出
I am inside main method
I am inside method 1
my List is printing
我有一个 JAVA class 有两种方法。第一个是main方法,第二个是method1()。
假设以下是 class:
public class SomeClass() {
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(List<String> listOfStrings){
System.out.println("I am inside method 1");
}
}
现在您可以在表达式中看到,要调用方法 1,我需要传递一个列表作为参数。怎么做?表达式中需要进行哪些更改?如果我想在我的程序中传递动态参数怎么办?
您可以创建一个 List
或将其作为参数来自其他来源。
Only thing you need to take care is to put inside the
map
object, which used byMVEL
for evaluation.
需要按上述方式传递列表 -> obj.method1(myList);
下面的工作代码
public class SomeClass {
public static void main(String[] args) {
SomeClass myObj = new SomeClass();
Map<String, Object> map = new HashMap<String, Object>();
map.put("obj", myObj);
List<String> listOfStrings = new ArrayList<String>();
listOfStrings.add("my ");
listOfStrings.add("List ");
listOfStrings.add("is printing");
map.put("obj", myObj);
map.put("myList", listOfStrings);
MVEL.eval("System.out.println(\"I am inside main method\");obj.method1(myList);",map);
}
public static void method1(List<String> listOfStrings) {
System.out.println("I am inside method 1");
for (String s : listOfStrings) {
System.out.print(s);
}
}
}
输出
I am inside main method
I am inside method 1
my List is printing