如何测试 jobject Class<?> 引用是否属于特定的 class (JNI)

How to test if a jobject Class<?> reference is of a specific class (JNI)

在 JNI 中,如何测试作为 Class<?> 引用的 jobject 是否与 jclass 给出的 class 匹配?

示例:

我有以下 Class<?> 引用作为本机方法参数传递到 JNI 中:

jobject classRef

我可以从 class ref 中得到 jclass class 描述符,如下所示:

jclass classRefDescriptor = (*env)->GetObjectClass(env, classRef);

然后我可以获得对 int.classjclass 引用,如下所示:

jclass Integer_class = (*env)->FindClass(env, "java/lang/Integer");
jclass int_class = (*env)->GetStaticObjectField(env, Integer_class,
        (*env)->GetStaticFieldID(env, Integer_class, "TYPE", "Ljava/lang/Class;"));

现在我想测试 classRef 是否与 int_class 相同 class 引用。

我尝试执行以下操作,基于 Java 如何让您测试 if (myObject.getClass() == int.class) { ... }:

if (classRefDescriptor == int_class) { ... }

但这不起作用,两个 jclass 值相差几位。

有什么建议吗?

如果 classRef 实际上是一个 Class<T> 对象,那么 GetObjectClass() 将 return 一个匹配 Class<Class>jclass 实例。

为什么不简单地使用 equals

jclass clsClass = env->GetObjectClass(classRef); /* Class<Class> */
jmethodID midClassEquals = env->GetMethodID(clsClass, "equals", "(Ljava/lang/Object;)Z");
jboolean areEqual = env->CallBooleanMethod(classRef, midClassEquals, int_class);