Часть проблемы заключается в том, что JavaMetaClass. new предполагает, что он всегда будет вызываться для создания прокси, когда он будет вызываться для каждого класса-потомка. В той же строке обработка jclass_registry должна быть ограничена реальными прокси. Еще я обнаружил, что обработка объектов, возвращаемых из Java, является слабой, что делает невозможным их передачу обратно в методы Java.
Я могу поработать над некоторыми из этих вопросов в свое время.
Мне очень нравится, насколько быстро jnius загружает Java и может использовать последние версии Python.
Хотите поддержать этот вопрос? Разместите награду за это! Мы принимаем награды через Bountysource .
Извините за задержку, можете ли вы предоставить более конкретное описание (тестовые случаи?) для каждой из этих проблем? Я начал некоторую работу, чтобы разрешить наследование классов java от python (с использованием прокси), но она не завершена, однако проблемы, которые вы здесь указываете, кажутся слабо связанными с этим и, вероятно, должны быть разделены на несколько разных проблем.
Извините, что вступаю в дискуссию, но наследование класса Java может быть не тем, что вам нужно @Apalala , я думаю, что лучше обернуть класс Java в класс Python, как это сделано в этом классе . Это может быть неочевидно в связанном коде, потому что все автоклассы выполняются в java.py, но код эквивалентен
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
Причины не наследовать класс Java:
class Element
, class Node
и class Relationship
на графике, почти все они имеют шаблонный код, даже если большую часть времени это делается для того, чтобы сделать API более Pythonic;)Судя по производительности, я не думаю, что есть какое-то влияние, но @tshirtman может знать лучше.
Другое дело, обертывание объектов Java работает прямо сейчас и очень хорошо :-)
Возможно ли переопределение метода java с использованием кода python на данный момент?
Как насчет наследования классов Java?
Я потратил довольно много времени на это, и я пришел к выводу, что не было никакого практического способа сделать это, за исключением генерации байт-кода Java во время выполнения, для этого есть библиотеки, но это было похоже на добавление много усложняет библиотеку и, вероятно, выходит за рамки. Не уверен насчет закрытия, но я не думаю, что над этим будут работать, поэтому было бы разумно пометить его как неисправленное.
@ monami7001 есть прогресс?
это было ~ 4 года назад, и, насколько мне известно, нет, генерация байт-кода Java во время выполнения по-прежнему выглядит единственным вариантом (и, возможно, это не так плохо, как я, и мы должны изучить это).
Один обходной путь :
использовать его с автоклассом