我试图通过使用反射来查找 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)
添加回答
举报
0/150
提交
取消