2008-11-24 66 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) {} 

如果你想與任意對象類型要做到這一點,使用對象[]類。請記住,通過這樣做你會失去安全性。