使用反射查找Java类在JNI中是否为final 我试图通过使用反射来发现一个java类是C++的最后一个。因此,在JNI中有下一个Java方法: int modifiers = com.package_name.class_name.class.getModifiers(); Modifier.isFinal(mofidiers);
在调用反射之前,一切都正常,因为反射错误地报告非final类实际上是final类 我已经验证了Modifiers.getModifiers结果,正如预期的那样,如果不是final,它将正确返回1,如果final返回17。然而,Modifiers.IsFinal()也会为“1”值结果返回True,这是公共的,不是最终的 如果使用Java,则不会发生此问题,仅在Jni中。我不希望直接与数值结果进行比较使用反射查找Java类在JNI中是否为final 我试图通过使用反射来发现一个java类是C++的最后一个。因此,在JNI中有下一个Java方法: int modifiers = com.package_name.class_name.class.getModifiers(); Modifier.isFinal(mofidiers);,java,android,reflection,java-native-interface,final,Java,Android,Reflection,Java Native Interface,Final,在调用反射之前,一切都正常,因为反射错误地报告非final类实际上是final类 我已经验证了Modifiers.getModifiers结果,正如预期的那样,如果不是final,它将正确返回1,如果final返回17。然而,Modifiers.IsFinal()也会为“1”值结果返回True,这是公共的,不是最终的 如果使用Java,则不会发生此问题,仅在Jni中。我不希望直接与数值结果进行比较 jboolean test(JNIEnv* env) { jclass class_Mod
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)
问题在于,isFinal是一种静态方法,因此: 替换此项:
env->CallBooleanMethod(class_modifier, method_isFinal, modifiers)
据此:
env->CallStaticBooleanMethod(class_modifier, method_isFinal, modifiers)
我不明白当参数的格式错误时,第二个
FindClass()
调用怎么可能成功。比较上一次通话。我不知道当方法是静态的时,调用CallBooleanMethod()
怎么可能成功。您需要对调用的每个JNI API函数进行错误检查。我不知道在参数格式错误的情况下,第二次FindClass()
调用怎么可能成功。比较上一次通话。我不知道当方法是静态的时,调用CallBooleanMethod()
怎么可能成功。您需要对调用的每个JNIAPI函数进行错误检查。