1

我正在使用 Jpype 在 Python 和 java 之间进行接口

在将 Py Dict 传递给相应的 Java Map (java.util.Map) 对象时,我收到错误消息:未找到匹配的重载。在 native\common\jp_method.cpp:121

这是示例代码

..........python 代码 ....................

1.stuff = {'name': 'Zed'}

2.Obj.testMethodofJava(stuff);#其中obj是Java类的对象

..........python 代码 ....................

*********java代码**************************

public void testMethodofJava(HashMap userContextMap)

*********java代码**************************

请注意,我能够访问接受原始数据类型(如 int 和 string)的 java 类的所有其他成员函数

我尝试用 Object (Hashmap) 替换 HashMap 内容,但这也导致了同样的错误

在这种情况下请帮助我。

提前感谢

4

2 回答 2

2

我是新手,刚刚发现:

    stuff = {'name': 'Zed'}
    map = JObject(stuff , JClass('java.util.Map'))
    Obj.testMethodofJava(map)
于 2017-12-21T09:14:00.620 回答
0

JPype 默认只转换为集合接口。不能保证它将实现任何特定的具体类转换,特别是对于像 HashMap 这样的派生类。

因此,您需要为要转换为的具体类型插入一个构造函数。

    import java
    stuff = {'name': 'Zed'}
    Obj.testMethodofJava(java.util.HashMap(stuff))

我建议不要给出的解决方案map = JObject(stuff, JClass('java.util.Map'))取决于实现细节,即 dict 到 Map 的隐式转换碰巧产生了 HashMap。它工作的事实是一个错误,因为转换转换器应该返回请求的类型而不是派生类型。该错误已经纠正了一段时间。

一般来说,当界面可以使用时强制使用特定的具体类型是糟糕的设计,但当然用户通常无法影响库的设计选择,因此经常出现这种情况。

于 2020-08-04T02:09:39.823 回答