MVEL函数中的可选参数

时间:2008-11-24 12:44:53

标签: java optional-parameters mvel

有没有办法让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 ...}

但第二个似乎完全覆盖了第一个定义。

由于

2 个答案:

答案 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。请记住,这样做会失去类型安全性。