为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2023-09-06 16:46:33
我试图通过使用反射来查找 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);} 
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

问题是isFinal是一个静态方法,所以:

替换这个:

env->CallBooleanMethod(class_modifier, method_isFinal, modifiers)

这样:

env->CallStaticBooleanMethod(class_modifier, method_isFinal, modifiers)


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信