我想使用JNI迭代给定类的对象的所有字段值。我找到了JVMTI方法GetClassFields
来获取对象字段的jfieldID
个。在JNI API中,我找到了方法Get<type>Field
。但是,要使用这些方法,我首先要知道我是在处理其中一个基元,某种类型的数组还是对象。我找到了一个JNI方法ToReflectedField
,所以我可以调用反射API的Java方法。但是,这似乎过于复杂且容易出错。
有没有办法通过JNI或JVMTI的本机函数实现这一目标?
答案 0 :(得分:1)
您可以使用JVMTI获取每个字段的类型,然后调用相应的GetField方法:
jvmtiError
GetFieldName(jvmtiEnv* env,
jclass klass,
jfieldID field,
char** name_ptr,
char** signature_ptr,
char** generic_ptr)