部分问题在于 JavaMetaClass。 new假设它总是被调用来创建一个代理,当它被每个后代类调用时。 在同一行,jclass_registry 的处理必须限于实际代理。 我发现的另一件事是,对从 Java 返回的对象的处理是松懈的,这使得无法将它们传递回 Java 方法。
我可以在适当的时候解决其中的一些问题。
我非常喜欢 jnius 加载 Java 的速度,并且能够使用最新版本的 Python。
想要支持这个问题? 在上面发布赏金! 我们通过Bountysource接受赏金。
抱歉耽搁了,您能否为每个问题提供更具体的(测试用例?)描述? 我开始了一些工作以允许从 python 继承 java 类(使用代理),但这并不完整,但是,您在此处指出的问题似乎与此松散相关,并且可能应该分成几个不同的问题。
很抱歉参加讨论,但是继承 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对象现在工作得很好:-)
现在可以使用 python 代码覆盖 java 方法吗?
java类继承呢?
我花了很多时间研究这个,我得出的结论是没有实际的方法可以做到这一点,除了在运行时生成 java 字节码之外,还有库可以做到这一点,但感觉就像添加图书馆有很多复杂性,并且可能超出范围。 不确定是否要关闭,但我认为它不会继续工作,因此将其标记为 wontfix 并不是不合理的。
@monami7001有什么进展吗?
那是大约 4 年前的事了,据我所知,在运行时生成 java 字节码仍然是唯一的选择(也许它不像我那么糟糕,我们应该研究一下)。
一种解决方法是:
将它与自动类一起使用