Mam tę klasę Java,
public class sample {
public Integer foo(Integer x){
return x+5;
}
}
A z Jythonem chcę zadzwonić .foo
podczas przekazywania „parametru-słowa kluczowego” do argumentu. Skończyło się na następującym kodzie Pythona,
java_file = sample()
kwargs = {"x":3}
print java_file.foo(**kwargs)
Ale to powoduje błąd,
print java_file.foo(**kwargs)
TypeError: foo(): takes no keyword arguments
Czy jest na to sposób? Dzięki
Odpowiedzi:
0 dla odpowiedzi № 1Od tego Jython FAQ:
5.3 Obsługa * args i ** kw w metodach Java
W Jythonie możesz obsługiwać argumenty słów kluczowych w metodach Java, definiując metodę taką jak ta (parametry są ważnym punktem):
public PyObject foo(PyObject[] args, String[] keywords);
Tablica słów kluczowych zawiera wszystkie słowa kluczowe dla argumentów zdefiniowanych przez słowa kluczowe. Na przykład, jeśli zadzwoniłeś do foo z:
foo(1,2,3,four=4,five=5)
argumenty to: [1, 2, 3, 4, 5], a słowa kluczowe: ["cztery", "pięć"] (tablica składająca się z 2 elementów).
Dodatkowo możesz skorzystać z eksperymentalnegoparser argumentów org.python.core.ArgParser, aby zająć się mapowaniem tych dwóch tablic. Więcej informacji na temat org.python.core.ArgParser można znaleźć w Javadocs (lub źródle).
W powyższym przykładzie przykładowa klasa może wyglądać następująco:
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;
}
}