使用 Java JNI 检查 jobject 是否为数组

Check if jobject is an array using Java JNI

假设我在 JNI 代码中得到了一个未知(任意)类型的工作对象。我如何检查它是否是一个数组?查找数组元素类型加分。

因此,JNI 似乎没有提供检查数组的快捷函数,因此必须模拟对标准 Java 方法的调用 Class.isArray(对象是要测试的对象):

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()) 获取编码类型名称并解析它可能更容易 - 数组类型以 '[' 开头,如果有单个后面一个字母,就是基本类型数组,否则就是对象数组(特别是,可能是多维数组)。