如何通过JNI将cpp set值传递给java HashSet?
jobject getJintSet(std::set<int> *stdSet){
if (stdSet == NULL) {
return NULL;
}
JniMethodInfo t;
JniHelper::getMethodInfo(t
, "java/util/HashSet"
, "<init>"
, "(I)V");
jobject ret = t.env->NewObject(t.classID, t.methodID,stdSet->size());
JniHelper::getMethodInfo(t
, "java/util/HashSet"
, "add"
, "(Ljava/lang/Object;)Z");
for (std::set<int>::iterator it = stdSet->begin(); it != stdSet->end(); it++) {
jobject k = *it;
t.env->CallObjectMethod(ret, t.methodID, k); //Here is the problem
//the HashSet object type is Integer but a cpp int value is being passed,
// then it crashed.
}
return ret;
}发布于 2014-04-25 11:42:18
Java的泛型是通过类型擦除实现的。因此,HashSet可以包含您在其中放入的任何类型。当然,返回某个类型的HashSet也是方法约定的一部分。
如果想要添加一个Integer值,您必须创建一个“Integer /lang/Integer;”对象。
如果您希望添加int值,只需键入k作为jint,而不是jobject,以匹配您对"Z“的使用。
https://stackoverflow.com/questions/23282563
复制相似问题