如何添加C ++&#34; int&#34;到HashSet <integer>?</integer>

时间:2014-04-25 01:14:12

标签: java c++ java-native-interface

如何通过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;
}

1 个答案:

答案 0 :(得分:0)

Java的泛型是用类型擦除实现的。因此,HashSet可以包含您放入的任何类型。当然,它将返回方法契约的一部分来返回某种类型的HashSet。

如果要添加Integer值,则必须创建“Ljava / lang / Integer;”宾语。

如果您想添加int值,只需将k键入jint而不是jobject,以匹配您对“Z”的使用。