首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pyjnius覆盖Python中的Java方法

使用Pyjnius覆盖Python中的Java方法
EN

Stack Overflow用户
提问于 2020-03-20 21:57:32
回答 1查看 281关注 0票数 0

我想使用Pyjnius创建一个Python类,它扩展Java类并覆盖它的一些方法。

具体地说,这些Java类:

代码语言:javascript
复制
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();
    }

}

代码语言:javascript
复制
public class B extends A {

    public void test_method() {
        System.out.println("test method");
    }

    public static void main(String[] args) {
        A.run(new B());
    }
}

当我运行它时,我看到:

代码语言:javascript
复制
Running...
test method

如何使用Pyjnius在Python中重新实现B

这是我的尝试:

代码语言:javascript
复制
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版本时,我看到以下内容:

代码语言:javascript
复制
Running...
In parent test_method!!!

它没有正确地覆盖test_method。我该怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2020-04-02 19:00:26

这里的答案是,我正在尝试做的事情是不可能的。JVM不能调用在Python子类中实现的a方法,因为它甚至不知道它的存在。

解决方法是在类B中实现run方法,但要适应子类的方法。如下所示:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60775615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档