2013-10-01 2 views
2

Как я могу получить доступ к методу Java с именем next(), когда тот же класс имеет метод getNext()?Свойства метода JPype access shadows method с именем свойства

У JPype есть функция, которая даст вам доступ к свойствам bean (get-Methods без параметра), используя только имя свойства. Поэтому, если у вас есть класс с методом getNext(), вы можете получить доступ к этому свойству bean из python, используя instance.next, что приятно в 99,9% случаев. Но как я могу получить доступ к instance.next()? Если я вызову instance.next(), я получу исключение, заявив, что возвращаемый тип свойства bean-компонента не может быть вызван.

ответ

1

Вы, вероятно, придется прибегнуть к помощи отражения от базового класса Java:

# iterate through all methods 
for method in instance.__javaclass__.getMethods(): 
    # find the method matching the correct signature 
    if method.name == u'next' and len(method.parameterTypes) == 0: 
     # create a function that invokes the method on the given object 
     # without additional arguments 
     next_instance = lambda o: method.invoke(o, []) 
     break 
else: 
    raise Exception('method was not found') 

nxt = next_instance(instance) 
+0

Спасибо, это работает. Но я предпочитаю использовать исправление, которое теперь находится в викторине jpeype оригинала (см. Мой собственный ответ). – bastian

+0

Да, это, конечно, лучше, если оно исправлено. Мое решение - всего лишь обходное решение для версий, которые пока не поддерживают это. – mata