2008-11-24 143 views
4

有没有办法让MVEL 2.0(http://mvel.codehaus.org/)与具有可选参数的函数一起工作?MVEL函数中的可选参数

我希望能够EVAL此:

TRUNC( 'blahblah',2)

而且

TRUNC( 'blahblah',2,“[...] “);

现在,我已经尝试:

高清TRUNC(参数1,参数2,参数3){...实现了一套...}

,如果我尝试只用3个参数来调用它给出了一个例外。 我也试过:

高清TRUNC(参数1,参数2,参数3){...实现了一套...} 高清TRUNC(参数1,参数2){...实现了一套...}

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

谢谢

回答

1

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

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

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

调用方法()是可能的一个或两个参数:)

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) {} 

如果你想与任意对象类型要做到这一点,使用对象[]类。请记住,通过这样做你会失去安全性。