使用反射查找 JNI 中的 Java 类是否为 Final

我试图通过使用反射来查找 java 类是否是来自 C++ (jni) 的最终类。因此,JNI 中有以下 Java 方法:

int modifiers = com.package_name.class_name.class.getModifiers();
Modifier.isFinal(mofidiers);

一切正常,直到调用反射Modifier.isFinal(),它错误地报告非最终类实际上是最终类。

我已经验证了 Modifiers.getModifiers 结果,并且正如预期的那样,当不是 Final 时,它正确返回1,当 Final 返回17时。然而 Modifiers.IsFinal() 也为“1”值结果返回 True,这是公共的而不是最终的。

如果是 Java,则不会出现此问题,仅在 Jni 中出现。我不想直接与数字结果进行比较。


jboolean test(JNIEnv* env)

{

    jclass class_Modifier = env->FindClass("java/lang/reflect/Modifier");

    jmethodID method_isFinal = env->GetStaticMethodID(class_Modifier, "isFinal", "(I)Z");


    jclass class_Class = env->FindClass("java/lang/Class");

    jmethodID method_getModifiers = env->GetMethodID(class_Class, "getModifiers", "()I");


    jclass class_Test = env->FindClass("com/package_name/Test");

    jint modifiers = env->CallIntMethod(class_Test, method_getModifiers);

    return env->CallBooleanMethod(class_Modifier, method_isFinal, modifiers);


阿晨1998
浏览 92回答 1
1回答

慕森卡

问题是isFinal是一个静态方法,所以:替换这个:env->CallBooleanMethod(class_modifier, method_isFinal, modifiers)这样:env->CallStaticBooleanMethod(class_modifier, method_isFinal, modifiers)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java