gpt4 book ai didi

java - 使用反射在 JNI 中查找 Java 类是否为最终类

转载 作者:行者123 更新时间:2023-11-29 04:06:44 27 4
gpt4 key购买 nike

我正在尝试使用反射从 C++ (jni) 中查找 java 类是否为最终类。因此,在 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);
}

最佳答案

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

替换这个:

env->CallBooleanMethod(class_modifier, method_isFinal, modifiers)

由此:

env->CallStaticBooleanMethod(class_modifier, method_isFinal, modifiers)

关于java - 使用反射在 JNI 中查找 Java 类是否为最终类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com