Une partie du problème est que JavaMetaClass. new suppose qu'il sera toujours appelé pour créer un proxy, lorsqu'il sera appelé pour chaque classe descendante. Sur la même ligne, la gestion du jclass_registry doit être limitée aux proxys réels. Une autre chose que j'ai trouvée est que le traitement des objets renvoyés par Java est laxiste, ce qui rend impossible leur retransmission aux méthodes Java.
Je peux travailler sur certaines de ces questions en temps voulu.
J'aime beaucoup la rapidité avec laquelle jnius charge Java et la possibilité d'utiliser les dernières versions de Python.
Vous voulez soutenir ce problème ? Publiez une prime dessus ! Nous acceptons les primes via Bountysource .
Désolé pour le retard, pouvez-vous fournir une description plus précise (cas de test ?) Pour chacun de ces problèmes ? J'ai commencé un travail pour permettre l'héritage des classes Java à partir de python (en utilisant des proxys), mais ce n'est pas complet, cependant, les problèmes que vous signalez ici semblent vaguement liés à cela, et devraient probablement être divisés en plusieurs problèmes différents.
Désolé d'entrer dans la discussion, mais hériter d'une classe Java n'est peut-être pas ce dont vous avez besoin @Apalala , je pense que c'est une meilleure idée d'envelopper la classe Java dans une classe Python comme c'est fait dans cette classe . Ce n'est peut-être pas évident dans le code lié car toutes les classes automatiques sont effectuées dans java.py mais le code est équivalent à
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
Les raisons de ne pas hériter de la classe Java sont :
class Element
, class Node
et class Relationship
dans le graphique presque toutes ont du code passe-partout même si la plupart du temps c'est pour rendre l'API plus Pythonique ;)Du point de vue des performances, je ne pense pas qu'il y ait d'impact, mais @tshirtman le sait peut-être mieux.
Autre chose, l'encapsulation d'objets Java fonctionne en ce moment et très bien :-)
Est-il possible de remplacer la méthode Java à l'aide de code python pour le moment?
Qu'en est-il de l'héritage de classe Java ?
J'ai passé pas mal de temps à chercher là-dedans, et j'étais arrivé à la conclusion qu'il n'y avait aucun moyen pratique de le faire, à moins de générer du bytecode java au moment de l'exécution, il existe des bibliothèques pour le faire, mais cela ressemblait à ajouter beaucoup de complications pour la bibliothèque, et probablement hors de portée. Je ne suis pas sûr de la fermeture, mais je ne pense pas que cela va être travaillé, il ne serait donc pas déraisonnable de le marquer comme non résolu.
@ monami7001 des progrès ?
c'était il y a environ 4 ans, et à ma connaissance non, générer du bytecode java au moment de l'exécution semble toujours être la seule option (et peut-être que ce n'est pas aussi grave que moi et nous devrions nous pencher là-dessus).
Une solution de contournement est :
pour l'utiliser avec autoclass