2014-07-10 2 views
0

Я хочу перебирать все значения полей объекта данного класса с помощью JNI. Я нашел метод JVMTI GetClassFields, чтобы получить поля jfieldID s полей объекта. В API JNI я нашел методы Get<type>Field. Однако, чтобы использовать эти методы, я сначала должен знать, имею ли я дело с одним из примитивов, массивами определенного типа или объектов. Я нашел метод JNI ToReflectedField, чтобы я мог назвать методы Java API отражения. Однако это кажется чрезмерно сложным и подверженным ошибкам.get jclass from jfieldID

Есть ли способ достичь этого с помощью собственных функций JNI или JVMTI?

+0

Почему? Вы можете сделать все это прямо на Java. Нет JNI или JVMTI вообще. – EJP

+0

Я хочу скопировать объект и все его ссылки на «родную кучу», чтобы они были невидимы для GC. Если нет простого способа добиться этого с помощью JNI или JVMTI, я буду выполнять итерационную часть в Java. Я просто подумал, что код будет легче понять, если у меня есть итерационная и копирующая часть на родной стороне. – box

+0

Я бы рискнул сказать, что * нет * Java-код легче понять на родной стороне :) – technomage

ответ

1

Вы можете использовать JVMTI, чтобы получить тип каждого поля, а затем вызвать соответствующий метод ПолучитьПолеЗаголовка:

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

 Смежные вопросы

  • Нет связанных вопросов^_^