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