Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将Py Dict传递给Map Obj时,Jpype没有匹配的重载_Java_Python_Jython_Jpype - Fatal编程技术网

在Java中将Py Dict传递给Map Obj时,Jpype没有匹配的重载

在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代码**************************

我正在使用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内容, 但这也导致了同样的错误

请帮我解决这个问题


谢谢你,我是新手,刚刚发现:

    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,因为强制转换转换器应该返回请求的类型而不是派生类型。这个错误已经纠正了一段时间了

一般来说,当一个界面可以使用时,强制使用特定的具体类型是很糟糕的设计,但是用户通常不能影响库的设计选择,所以经常会出现这种情况