java - 如何将 C++ "int"添加到 HashSet<Integer>?

标签 java c++ java-native-interface

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

相关文章:

java - JNI 包装的 DLL 仅在从默认包调用时才有效

java - guava 和 apache 等效库之间有哪些重大改进?

java - 使用 OpenGL 进行 FPS 相机旋转

java - Jasperreports 5.5.0 中 JasperManager.loadXmlDesign() 的替代方案?

java - spring框架如何将属性映射到Java对象?

c++ - VC6转VS2008时try catch报错

PHP shell_exec 不适用于两个不同的应用程序版本

c++ - JNI 共享库中的 undefined symbol ,可执行文件正在运行

c++ - 如何找到派生类的直接父类

java - 使用内存映射文件作为交换文件?