有什么方法可以测试来自同一类的两个作业对象吗
Is there any method to test two jobject are from the same class?
对于JNI,我有两个jobject jobj1和jobj2,我如何测试它们是同一类的实例?
我想测试两个jobjectjobj1和jobj2是否是同一类的实例。
JNIEXPORT jboolean JNICALL TestTwoObjectEqual
(JNIEnv *env, jclass jclazz, jobject jobj1, jobject jobj2);
I tried jclass cls_arraylist1 = env->GetObjectClass(jobj1);
jclass cls_arraylist2 = env->GetObjectClass(jobj2);
然后比较*cls_arraylist1==*cls_arraylist2,但==未定义。
如何测试jobj1和jobj2是否是JAVA的同一类的实例。
bool testTwoObjectEqual(JNIEnv *env, jobject jobj1, jobject jobj2) {
jclass cls1 = env->GetObjectClass(jobj1);
jclass cls2 = env->GetObjectClass(jobj2);
bool res = env->IsInstanceOf(jobj1, cls2) && env->IsInstanceOf(jobj2, cls1);
env->FreeLocalRef(cls1);
env->FreeLocalRef(cls2);
return res;
}
如果jobj2可能是派生自jobj1类的,则可以轻松降低此测试的严格性。但是,如果这两个对象都是从同一基类派生的,例如从java.util.ArrayList派生的,那么您必须将这个类提供给您的测试方法。
如果您想知道jobj1和jobj2是相同类型的ArrayList,您必须检查这些列表的元素,因为有关泛型的信息仅在编译时提供:
- 检查jobj1是否为ArrayList的实例
- 检查jobj2是否为ArrayList的实例
- 获取jobj1,jel1的第一个非null元素
- 获取jobj2的第一个非null元素,jel2
- 检查jel1的等级是否等于jel2的等级
PS我真的不明白你为什么要使用专用的本地方法来完成这项任务;正如其他(已删除的)答案所建议的那样,这是Java中的一行代码,它们更容易理解,并且没有性能问题。此函数仅作为更大的JNI库的构建块相关,因此您需要在返回之前释放所有本地引用。
相关文章:
- 如何创建从同一类继承的不同对象的向量
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 同一类的两个对象相互引用
- 打印同一类中的 3 个对象
- 在 c++ 中,同一类的一个对象如何分配给同一类的另一个对象?
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何重载"<"运算符以比较同一类的对象?
- 将来自类的对象用作另一类C 类的对象
- 修改对象也会修改同一类的所有其他对象
- 在另一类中使用受保护的破坏者删除对象
- 如何使用箭头指针打印出一类数组对象,这些对象中有多个分数
- 如何为同一类对象的成员函数保留单独的变量副本?
- 如何将成员函数用于同一类的不同对象
- 如何使用nullptr初始化同一类对象的静态指针数组?
- 一类应管理其实例化对象
- 如何重载赋值运算符以满足 ob1=ob2=ob3(ob1,ob2,ob3 是同一类的对象)
- C++:按值将对象传递给同一类的成员函数
- 有什么方法可以测试来自同一类的两个作业对象吗
- C++类构造函数使用指向同一类对象的指针
- C++如何共享同一类对象中的公共元素