我想使用Pyjnius创建一个Python类,它扩展Java类并覆盖它的一些方法。
具体地说,这些Java类:
public class A {
public void test_method() {
System.out.println("In parent test_method!!!");
}
public static void run(A a) {
System.out.println("Running...");
a.test_method();
}
}和
public class B extends A {
public void test_method() {
System.out.println("test method");
}
public static void main(String[] args) {
A.run(new B());
}
}当我运行它时,我看到:
Running...
test method如何使用Pyjnius在Python中重新实现B?
这是我的尝试:
import jnius_config
jnius_config.set_classpath('jars/testClasses.jar')
from jnius import autoclass, PythonJavaClass, JavaClass, MetaJavaClass, java_method
A = autoclass('test.pyjnius.A')
class B(A):
__javaclass__ = 'test/pyjnius/A'
@java_method('()Z')
def test_method(self):
print("test method")
A.run(B())当我运行Python版本时,我看到以下内容:
Running...
In parent test_method!!!它没有正确地覆盖test_method。我该怎么解决这个问题呢?
发布于 2020-04-02 19:00:26
这里的答案是,我正在尝试做的事情是不可能的。JVM不能调用在Python子类中实现的a方法,因为它甚至不知道它的存在。
解决方法是在类B中实现run方法,但要适应子类的方法。如下所示:
class B(A):
__javaclass__ = 'test/pyjnius/A'
@java_method('()Z')
def test_method(self):
print("test method")
def run(self):
A.runPart1(self)
self.test_method()
A.runPart2(self)用Java语言在类A的修改版本中实现了runPart1和runPart2。
https://stackoverflow.com/questions/60775615
复制相似问题