有没有办法使用 Jpype 对接口进行类型转换?

Posted

技术标签:

【中文标题】有没有办法使用 Jpype 对接口进行类型转换?【英文标题】:Is there a way to typecast interface using Jpype? 【发布时间】:2021-05-24 12:12:01 【问题描述】:

我正在尝试使用 Jpype 从 Python 调用 Java 代码,并尝试使用 JProxy 实现接口以进行回调。 如果我尝试强制转换,则会出现“TypeError:无法创建 Java 接口实例”的错误 例如

proxy = jpype.JProxy("PutCallback", dict=d, convert=False) 
javaPackage.TestClient.put(jLang.String("Pi"), 3, expiryType, jLang.String(" "), amazon.proxy)

但是如果我直接传递它会给出错误,因为我的方法在传递时没有找到方法,所以我传递的是 jproxy 对象

proxy = jpype.JProxy("PutResultCallback", dict=d, convert=False)
javaPackage.TestClient.put(jLang.String("Pi"), 3, expiryType, jLang.String(" "), proxy)```
  javaPackage.TestClient.put("Pi", 3, expiryType, " ", proxy)

TypeError: No matching overloads found for 
TestClient.put(java.lang.String,int,client.Dat
aExpiryType,java.lang.String,_jpype._JProxy), options are:
        
public void TestClient.put(java.lang.String,boolean,client.DataExpiryType,java.la
ng.String,client.PutResultCallback)```

【问题讨论】:

【参考方案1】:

这将通过从 Dev 包中删除静态引用来实现,它会自动捕获代理对象。

无需将其类型转换为接口。

注意:如果你的方法是静态的,那么你需要通过静态引用来调用它。

【讨论】:

以上是关于有没有办法使用 Jpype 对接口进行类型转换?的主要内容,如果未能解决你的问题,请参考以下文章

通过 JPype 和 numpy 将 Java 类型转换为 Python

有没有办法在 protobuf-net 代理类中定义替代转换函数(从/到接口)

python调用java代码-jpype

来自一个小菜鸟的总结--接口

JPype1 0.6.2安装不成功的解决办法

SpringMVC的类型转换的问题