我有这个Java类,
public class sample {
public Integer foo(Integer x){
return x+5;
}
}
使用Jython我想在将“keyword-parameter”传递给参数时调用.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 :(得分:1)
从此Jython FAQ:
5.3支持Java方法中的* args和** kw
在Jython中,您可以通过定义类似的方法来支持Java方法的关键字参数(参数是重点):
public PyObject foo(PyObject[] args, String[] keywords);
keywords数组包含关键字定义参数的所有关键字。例如,如果您使用:
调用foofoo(1,2,3,four=4,five=5)
args将是:[1,2,3,4,5],关键字将是:[' four',' five'](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;
}
}