有没有办法让MVEL 2.0(http://mvel.codehaus.org/)使用带有可选参数的函数?
我希望能够评估这个:
TRUNC( 'blahblah',2)
但也
TRUNC( 'blahblah',2 '[...]');
现在我尝试过:
def trunc(param1,param2,param3){... impl ...}
如果我尝试仅使用3个参数调用它,则会出现异常。 我也尝试过:
def trunc(param1,param2,param3){... impl ...} def trunc(param1,param2){... impl ...}
但第二个似乎完全覆盖了第一个定义。
由于
答案 0 :(得分:1)
在java中,您可以声明具有相同名称但具有不同参数的多个方法。 这样你就可以支持(以有限的方式)可选参数。 例如:
private void method(Object obj1) {
Object obj2 = new Object("Default");
method(obj1, obj2);
}
private void method(Object obj1, Object obj2) {
doStuff(...);
}
使用一个或两个参数调用方法():)
答案 1 :(得分:0)
MVEL有一个错误,它接受varargs的方法,但只用非varargs执行方法。所以你应该同时使用varargs和非varargs方法。对varargs方法进行查找,但只会调用非varargs。
parserContext = new ParserContext();
parserContext.addImport("color", MyImplementation.class.getMethod("color", double[].class));
在您的实现类中:
// This one is used for lookup, but never called.
public static Color color(double... values) {}
public static Color color(double gray) {}
public static Color color(double red, double green, double blue) {}
如果要使用任意对象类型执行此操作,请使用Object [] .class。请记住,这样做会失去类型安全性。