我有一个 java 方法,它从我的 native 方法调用,并向 native 代码返回一个对象数组。
对象数组的元素设置为,
Object[] arr = new Object[10];
arr[0] = new Integer(12);
arr[1] = new Float(25.5f);
我在 native 代码中收到此数组,如下所示,
jobjectArray a = (jobjectArray)(*env)->CallStaticObjectMethodA(env, <class_id>, <method_id>, <parameter_list>);
我将每个元素的数据类型存储在对象数组中。那么根据数据类型,我如何在 native 方法中访问相应的整数和浮点值。
我尝试了以下方法,
jobject obj = (*env)->GetObjectArrayElement(env, a, 0);
int num = (jint)obj;
但是设置为 num 的值不正确。
最佳答案
当您将Integer
转换为int
时,Java 会自动拆箱。但这种机制在 C 中不存在。您所做的就是获取元素的内存地址并将其解释为 int
。
如果您想在 C
端从 Integer
获取 int
,则必须调用 intValue
:
jobject objInteger = (*env)->GetObjectArrayElement(env, a, 0);
jclass cInteger = (*env)->FindClass(env, "java/lang/Integer");
jmethodID intValue = (*env)->GetMethodID(env, cInteger, "intValue", "()I");
int i = (*env)->CallIntMethod(env, objInteger, intValue);
关于java - 如何访问 jni 中 jobjectarray 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315399/