如何通过JNI将一个cpp集合值传递给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;
}
最佳答案
Java 的泛型是通过类型删除实现的。因此,HashSet 可以包含您放入其中的任何类型。当然,返回特定类型的 HashSet 将是方法契约的一部分。
如果要添加一个 Integer
值,您必须创建一个“Ljava/lang/Integer;”目的。
如果您想添加一个 int
值,只需键入 k
作为 jint
而不是 jobject
以匹配您对“Z”的使用。
关于java - 如何将 C++ "int"添加到 HashSet<Integer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282563/