如何通过JNI将HashMap从Java发送到C.

时间:2013-05-31 05:15:27

标签: java c java-native-interface hashmap

我的Object字段为HashMap。当Object传递给C时,我该如何访问该字段?

Object的{​​{1}}包含以下字段:

Class

1 个答案:

答案 0 :(得分:12)

您的问题的答案实际上归结为为什么您希望将Map传递给C而不是在Java中迭代Map并将内容传递给C.但是,我是谁来质疑为什么?

您询问如何访问HashMap(在您提供的代码Map)字段中?在Java中为它编写一个访问器方法,并在传递容器Object时从C调用该访问器方法。下面是一些简单的示例代码,展示了如何将Map从Java传递到C,以及如何访问size()的{​​{1}}方法。从中,您应该能够推断出如何调用其他方法。

容器对象:

Map

将Container传递给JNI的主类:

public class Container {

    private String hello;
    private Map<String, String> parameterMap = new HashMap<String, String>();

    public Map<String, String> getParameterMap() {
        return parameterMap;
    }
}

相关C函数:

public class MyClazz {

    public doProcess() {

        Container container = new Container();
        container.getParameterMap().put("foo","bar");

        manipulateMap(container);
    }

    public native void manipulateMap(Container container);
}

值得注意的是,我并不是在为方法本身初始化methodIDs和类而疯狂; this SO Answer向您展示如何缓存它们以供重复使用。