如果找到一个Java类是final JNI中使用反射

PerracoLabs:

我试图找到,如果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);
} 
API_1024:

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

替换此:

env->CallBooleanMethod(class_modifier, method_isFinal, modifiers)

这样:

env->CallStaticBooleanMethod(class_modifier, method_isFinal, modifiers)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中使用反射查找枚举类

在类和JavaScript模块中使用反射

如何检查如果一个类已经重写从科特林或Java使用反射的接口的默认方法?

在Java中使用反射API解析xml

在另一个类中使用一个类的数据 (Java/FileMenuHandler)

如果Java JVM仅使用其中的一个类,是否会加载整个jar或ear?

如何在WinRT中使用反射获取类的静态属性

使用 Java 反射覆盖另一个类的方法

在Java中使用反射调用重写的实例方法

如何在Java中使用反射实例化内部类?

在Java中使用反射调用已弃用/重载的函数

如何在Java中使用反射创建枚举实例?

在Java中使用反射迭代Nd数组的问题

如何在 Java 中使用反射调用 Kotlin 对象方法?

java - 在构造函数中使用反射设置最终字段

Java:如果只有一个类会使用新类,是否可以使用重构/解耦?

创建一个 C++ 类并在另一个包含 ndk android 中的 JNI 方法的 C++ 类中使用该类

Java反射:创建一个实现类

如何在 c# 中使用方法(如果可能)实例化一个类?

使用 Java 反射对方法实现中使用的特定类进行单元测试

在 Java 中,是否可以在另一个类中使用一个类的元素/函数?

Java:如何在另一个类中使用在一个类中实例化的对象?

如何在JAVA中使用反射从不同的类调用类的函数?

我可以在Java Applet中使用JNI吗?

从JNI获取Java中使用的字符串

如何在Java中的另一个类中使用嵌套类?

如果我在一个类上使用 alignas,第一个成员或基类是对齐的吗?

如何在Android项目中使用java反射获取超类中的子类列表

如何在Java类的公共成员中使用反射来调用方法?