从jfieldID获取jclass

时间:2014-07-10 21:46:29

标签: java java-native-interface jvmti

我想使用JNI迭代给定类的对象的所有字段值。我找到了JVMTI方法GetClassFields来获取对象字段的jfieldID个。在JNI API中,我找到了方法Get<type>Field。但是,要使用这些方法,我首先要知道我是在处理其中一个基元,某种类型的数组还是对象。我找到了一个JNI方法ToReflectedField,所以我可以调用反射API的Java方法。但是,这似乎过于复杂且容易出错。

有没有办法通过JNI或JVMTI的本机函数实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用JVMTI获取每个字段的类型,然后调用相应的GetField方法:

jvmtiError
GetFieldName(jvmtiEnv* env,
        jclass klass,
        jfieldID field,
        char** name_ptr,
        char** signature_ptr,
        char** generic_ptr)