Parte del problema es que JavaMetaClass. new asume que siempre se llamará para crear un proxy, cuando se llamará para cada clase descendiente. En la misma línea, el manejo de jclass_registry debe estar restringido a proxies reales. Otra cosa que encontré es que el tratamiento de los objetos devueltos por Java es laxo, lo que hace que sea imposible devolverlos a los métodos de Java.
Puedo trabajar en algunos de estos temas a su debido tiempo.
Me gusta mucho lo rápido que jnius carga Java y puede usar las últimas versiones de Python.
¿Quieres respaldar este problema? ¡Pon una recompensa por ello! Aceptamos recompensas a través de Bountysource .
Disculpe la demora, ¿puede proporcionar una descripción más específica (¿casos de prueba?) para cada uno de esos problemas? Comencé un trabajo para permitir la herencia de clases Java de Python (usando proxies), pero no está completo, sin embargo, los problemas que señala aquí parecen estar relacionados con eso, y probablemente deberían dividirse en varios problemas diferentes.
Lamento entrar en la discusión, pero heredar una clase de Java podría no ser lo que necesita @Apalala , creo que es una mejor idea envolver la clase de Java en una clase de Python como se hace en esta clase . Puede que no sea obvio en el código vinculado porque todas las clases automáticas se realizan en java.py pero el código es equivalente a
class MyJavaWrapperClass(AnyPythonClassOrMixin):
def __init__(self, *args, **kwargs):
JavaClass = autoclass('org.uber.cool.JavaClass`)
self._my_java_object = JavaClass(*args, **kwargs) # use double underscore to "hide" the Java object
Las razones para no heredar la clase Java son:
class Element
, class Node
y class Relationship
en el gráfico, casi todos tienen código repetitivo, incluso si la mayoría de las veces es para hacer que la API sea más Pythonic;)Desde un punto de vista perceptivo, no creo que haya ningún impacto, pero @tshirtman podría saberlo mejor.
Otra cosa, envolver objetos Java funciona ahora mismo y muy bien :-)
¿Es posible anular el método java usando el código python por ahora?
¿Qué pasa con la herencia de clase Java?
Pasé bastante tiempo buscando en esto, y llegué a la conclusión de que no había una forma práctica de hacerlo, aparte de generar el código de bytes de Java en tiempo de ejecución, hay bibliotecas para hacer eso, pero eso se sintió como agregar mucha complicación para la biblioteca, y probablemente fuera del alcance. No estoy seguro acerca del cierre, pero no creo que vaya a funcionar, por lo que no sería descabellado marcarlo como wontfix.
@ monami7001 ¿ algún progreso?
eso fue hace ~ 4 años, y que yo sepa, no, generar el código de bytes de Java en el tiempo de ejecución todavía parece ser la única opción (y tal vez no sea tan malo como pensé y deberíamos investigar eso).
Una solución es:
para usarlo con autoclass