gpt4 book ai didi

java - 使用 Pyjnius 覆盖 Python 中的 Java 方法

转载 作者:行者123 更新时间:2023-12-01 17:52:18 25 4
gpt4 key购买 nike

我想使用 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。我该如何解决这个问题?

最佳答案

这里的答案是我想做的事情是不可能的。 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 的修改版本中实现 runPart1runPart2

关于java - 使用 Pyjnius 覆盖 Python 中的 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60775615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com