在Java中将Py Dict传递给Map Obj时,Jpype没有匹配的重载
我正在使用Jpype来连接Python和java 在将Py Dict传递给相应的Java映射(Java.util.Map)对象时,我得到的错误是:找不到匹配的重载。在native\common\jp_method.cpp:121 下面是示例代码 python代码 1.stuff={'name':'Zed'} 2.Obj.testMethodofJava(stuff)#其中obj是Java类的对象 python代码 *********java代码************************** 公共void testMethodofJava(HashMap userContextMap) *********java代码************************** 请注意,我能够访问java类的所有其他成员函数,这些函数接受int和string等基本数据类型 我尝试用Object(HashMap)替换HashMap内容, 但这也导致了同样的错误 请帮我解决这个问题在Java中将Py Dict传递给Map Obj时,Jpype没有匹配的重载,java,python,jython,jpype,Java,Python,Jython,Jpype,我正在使用Jpype来连接Python和java 在将Py Dict传递给相应的Java映射(Java.util.Map)对象时,我得到的错误是:找不到匹配的重载。在native\common\jp_method.cpp:121 下面是示例代码 python代码 1.stuff={'name':'Zed'} 2.Obj.testMethodofJava(stuff)#其中obj是Java类的对象 python代码 *********java代码**************************
谢谢你,我是新手,刚刚发现:
stuff = {'name': 'Zed'}
map = JObject(stuff , JClass('java.util.Map'))
Obj.testMethodofJava(map)
默认情况下,JPype仅转换为集合接口。不能保证它将实现任何特定的具体类转换,特别是对于HashMap之类的派生类 因此,您需要为希望转换为的具体类型插入构造函数
import java
stuff = {'name': 'Zed'}
Obj.testMethodofJava(java.util.HashMap(stuff))
我建议不要使用提供map=JObject(stuff,JClass('java.util.map'))
的解决方案,这取决于dict到map的隐式转换产生HashMap的实现细节。它工作的事实是一个bug,因为强制转换转换器应该返回请求的类型而不是派生类型。这个错误已经纠正了一段时间了
一般来说,当一个界面可以使用时,强制使用特定的具体类型是很糟糕的设计,但是用户通常不能影响库的设计选择,所以经常会出现这种情况