我试图找到,如果Java类是通过使用反射来自C ++(JNI)决赛。因此,其在JNI下一个Java方法:
int modifiers = com.package_name.class_name.class.getModifiers();
Modifier.isFinal(mofidiers);
一切工作正常,直到呼吁反思Modifier.isFinal()
,它报告错误,一个非final类实际上是最后的。
我已经验证了Modifiers.getModifiers结果,当不是最终返回正确预期1,当最终返回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);
}
问题是,isFinal是一个静态方法,所以:
替换此:
env->CallBooleanMethod(class_modifier, method_isFinal, modifiers)
这样:
env->CallStaticBooleanMethod(class_modifier, method_isFinal, modifiers)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句