Jython通过Keyword-Parameter传递来调用Java方法

时间:2014-01-14 11:46:09

标签: java python class jython

我有这个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

有办法做到这一点吗?感谢

1 个答案:

答案 0 :(得分:1)

从此Jython FAQ

  

5.3支持Java方法中的* args和** kw

     

在Jython中,您可以通过定义类似的方法来支持Java方法的关键字参数(参数是重点):

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

keywords数组包含关键字定义参数的所有关键字。例如,如果您使用:

调用foo
foo(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;
    }
}