2014-01-14 20 views
1

我有這樣的Java類,的Jython通過關鍵字參數傳遞來調用Java方法

public class sample { 
    public Integer foo(Integer x){ 
     return x+5; 
    } 
} 

而且使用Jython我想打電話給.foo而通過「關鍵字參數」的說法。我結束了以下Python代碼,

java_file = sample() 
kwargs = {'x':3} 
print java_file.foo(**kwargs) 

但是,這導致一個錯誤,

print java_file.foo(**kwargs) 
TypeError: foo(): takes no keyword arguments 

有沒有辦法做到這一點?由於

回答

0

從這個Jython FAQ

5.3支持*指定參數和**千瓦在Java方法

在Jython中,你可以通過定義像這樣的方法支持Java方法關鍵字參數(在參數是重點):

public PyObject foo(PyObject[] args, String[] keywords); 

關鍵字數組包含關鍵字定義的所有關鍵字arg uments。例如,如果你打電話以foo:

foo(1,2,3,four=4,five=5) 

ARGS將是:[1,2,3,4,5]和關鍵字將是:[ '四', '五'](數組2元素)。

此外,您可以使用實驗參數解析器org.python.core.ArgParser來處理映射這兩個數組。有關org.python.core.ArgParser的更多詳細信息,請參閱Javadocs(或源代碼)。

在上面的示例中,樣本類可能看起來像這樣:

public class sample { 
    public Integer foo(PyObject[] args, String[] keywords) { 
     ArgParser argParser = new ArgParser("foo", args, keywords, "x"); 
     Integer x = argParser.getInt(0); 
     return x + 5; 
    } 
}