Jython通过传递关键字参数调用Java方法

Jython通过传递关键字参数调用Java方法,java,python,class,jython,Java,Python,Class,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(**kw

我有一个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
有办法做到这一点吗?感谢您的光临:

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

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

关键字数组包含关键字定义参数的所有关键字。例如,如果您使用以下命令调用foo:

foo(1,2,3,four=4,five=5)
args应该是:[1,2,3,4,5],关键字应该是:['four','five'](由2个元素组成的数组)

此外,您可以使用实验参数parser 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;
    }
}
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;
    }
}