有什么方法可以测试两个jobject来自同一个class吗?
Is there any method to test two jobject are from the same class?
对于JNI,我有两个jobject jobj1和jobj2,如何测试它们是同一个class的实例?
我想测试两个jobject jobj1和jobj2是否是同一个实例class.
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的同一个class的实例。
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 可以从 [=19= 的 class 派生,则可以轻松地降低此测试的严格程度]jobj1。但是也许这两个对象都是 derived 来自同一个基 class,例如来自 java.util.ArrayList — 那么您必须将此 class 提供给您的测试方法。
如果你想知道jobj1和jobj2是同一个ArrayList类型,你必须检查这些列表的元素,因为关于泛型的信息只是编译时的:
- 检查 jobj1 是 ArrayList 的实例
- 检查 jobj2 是 ArrayList 的实例
- 获取jobj1, jel1的第一个非空元素
- 获取jobj2的第一个非空元素,jel2
- 检查 jel1 的 class 是否等于 jel2 的 class
PS 我真的不明白你为什么要为这个任务使用专用的本地方法;正如其他(已删除的)答案所建议的那样,这是 Java 中的一行代码,它们更容易理解并且没有性能问题。此函数仅作为更大的 JNI 库的构建块相关,因此您需要在 return.
之前释放所有本地引用
对于JNI,我有两个jobject jobj1和jobj2,如何测试它们是同一个class的实例?
我想测试两个jobject jobj1和jobj2是否是同一个实例class.
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的同一个class的实例。
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 可以从 [=19= 的 class 派生,则可以轻松地降低此测试的严格程度]jobj1。但是也许这两个对象都是 derived 来自同一个基 class,例如来自 java.util.ArrayList — 那么您必须将此 class 提供给您的测试方法。
如果你想知道jobj1和jobj2是同一个ArrayList类型,你必须检查这些列表的元素,因为关于泛型的信息只是编译时的:
- 检查 jobj1 是 ArrayList 的实例
- 检查 jobj2 是 ArrayList 的实例
- 获取jobj1, jel1的第一个非空元素
- 获取jobj2的第一个非空元素,jel2
- 检查 jel1 的 class 是否等于 jel2 的 class
PS 我真的不明白你为什么要为这个任务使用专用的本地方法;正如其他(已删除的)答案所建议的那样,这是 Java 中的一行代码,它们更容易理解并且没有性能问题。此函数仅作为更大的 JNI 库的构建块相关,因此您需要在 return.
之前释放所有本地引用