我的Object
字段为HashMap
。当Object
传递给C时,我该如何访问该字段?
Object
的{{1}}包含以下字段:
Class
答案 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向您展示如何缓存它们以供重复使用。