我使用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 code **************************
public void testMethodofJava(HashMap userContextMap)
********* java code **************************
请注意,我能够访问java类的所有其他成员函数,这些函数接受原始数据类型,如int和string
我尝试用Object(Hashmap)替换HashMap内容, 但这也导致了同样的错误
请在这种情况下帮助我。
先谢谢
答案 0 :(得分:1)
我是一个新手,刚刚发现了这个:
stuff = {'name': 'Zed'}
map = JObject(stuff , JClass('java.util.Map'))
Obj.testMethodofJava(map)
答案 1 :(得分:0)
默认情况下,JPype仅转换为收集接口。无法保证它将实现任何特定的具体类转换,尤其是对于像HashMap这样的派生类。
因此,您需要为要转换为的具体类型插入一个构造函数。
import java
stuff = {'name': 'Zed'}
Obj.testMethodofJava(java.util.HashMap(stuff))
我建议使用map = JObject(stuff, JClass('java.util.Map'))
的解决方案,该解决方案取决于实现细节,即dict隐式转换为Map会产生HashMap。它起作用的事实是一个错误,因为强制转换转换器应该返回请求的类型而不是派生类型。该错误已纠正了一段时间。
通常来说,当接口需要使用特定的具体类型时,设计很差,但是当然,用户通常无法影响库的设计选择,所以常常会出现这种情况。