如何将C++ "int"添加到哈希集<Integer>?

How to add C++ "int" to HashSet<Integer>?

本文关键字:lt Integer gt 哈希集 C++ int 添加      更新时间:2023-10-16

如何通过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"的使用。