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

时间:2016-04-10 11:34:12

标签: java python jython jpype

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

请在这种情况下帮助我。

先谢谢

2 个答案:

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

通常来说,当接口需要使用特定的具体类型时,设计很差,但是当然,用户通常无法影响库的设计选择,所以常常会出现这种情况。