如何将C++ "int"添加到哈希集<Integer>?
How to add C++ "int" to HashSet<Integer>?
如何通过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"的使用。
相关文章:
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 使用IPC/共享内存将Integer数组从C++传递到Python
- C++ OpenCV Randu 函数抛出'Integer division by zero'
- 如何显式调用运算符<<
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 在C++初始化程序列表中使用Integer Literals
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- C Integer在C 代码中使用时会失去其恒定状态
- 为什么“操作员”需要const但不是为“运营商&lt;”