4

有没有办法让 MVEL 2.0 ( http://mvel.codehaus.org/ ) 使用带有可选参数的函数?

我希望能够对此进行评估:

trunc('blahblah',2)

但是也

trunc('blahblah',2,'[...]');

现在我试过了:

def trunc(param1,param2,param3) { ... 实现 ... }

如果我尝试仅使用 3 个参数调用它,则会出现异常。我也试过:

def trunc(param1,param2,param3) { ... impl ... } def trunc(param1,param2) { ... impl ... }

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

谢谢

4

2 回答 2

1

在java中,您可以声明多个具有相同名称但参数不同的方法。这样您就可以(以有限的方式)支持可选参数。例如。:

private void method(Object obj1) {
    Object obj2 = new Object("Default");
    method(obj1, obj2);
}

private void method(Object obj1, Object obj2) {
    doStuff(...);
}

可以使用一个或两个参数调用 method() :)

于 2010-12-13T14:29:56.993 回答
0

MVEL 有一个错误,它接受带有可变参数的方法,但只执行带有非可变参数的方法。所以你应该有一个可变参数和非可变参数方法。对可变参数方法进行查找,但只会调用非可变参数。

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

于 2011-04-26T14:52:13.347 回答