1
假設我在JNI代碼中獲得了未知(任意)類型的jobject。我怎樣才能檢查它是否是一個數組?用於查找數組元素類型的額外點。檢查jobject是否是一個使用Java JNI的數組。
假設我在JNI代碼中獲得了未知(任意)類型的jobject。我怎樣才能檢查它是否是一個數組?用於查找數組元素類型的額外點。檢查jobject是否是一個使用Java JNI的數組。
所以,JNI似乎沒有提供快捷功能來檢查一個數組,所以一個具有模仿調用標準Java方法Class.isArray
(obj是jobject測試):
jmethodID Class_isArray_m = (*env)->GetMethodID(env, Class_class, "isArray", "()Z");
jclass obj_class = (*env)->GetObjectClass(obj);
jboolean is_array = (*env)->CallBooleanMethod(obj_class, Class_isArray_mid);
元素類型可以使用Class.getComponentType()
以類似的方式找到。然而,取決於本機代碼想要做什麼,使用Class.getName()
(https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getName())解析它可能會更容易得到編碼類型名稱 - 數組類型以'['開頭,如果它後面有單個字母,它是原始數組類型,否則它是對象數組(尤其可能是多維數組)。