このJavaクラスがあります。
public class sample {
public Integer foo(Integer x){
return x+5;
}
}
そしてJythonで電話したい .foo
「keyword-parameter」を引数に渡します。私は次の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これから Jython FAQ:
5.3 Javaメソッドでの* argsおよび** kwのサポート
Jythonでは、次のようにメソッドを定義することにより、Javaメソッドでキーワード引数をサポートできます(パラメーターが重要なポイントです)。
public PyObject foo(PyObject[] args, String[] keywords);
キーワード配列には、キーワード定義の引数のすべてのキーワードが含まれます。たとえば、fooを次のように呼び出した場合:
foo(1,2,3,four=4,five=5)
argsは[1、2、3、4、5]、キーワードは["four"、 "five"](2つの要素の配列)です。
さらに、実験的な引数パーサーorg.python.core.ArgParserは、これら2つの配列のマッピングを処理します。 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;
}
}