如何通过JNI将c ++设置值传递给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;
}
答案 0 :(得分:0)
Java的泛型是用类型擦除实现的。因此,HashSet可以包含您放入的任何类型。当然,它将返回方法契约的一部分来返回某种类型的HashSet。
如果要添加Integer
值,则必须创建“Ljava / lang / Integer;”宾语。
如果您想添加int
值,只需将k
键入jint
而不是jobject
,以匹配您对“Z”的使用。