假设我在JNI代码中得到了一个未知(任意)类型的作业。如何检查它是否是阵列?查找数组元素类型的额外点。
答案 0 :(得分:2)
因此,JNI似乎没有提供检查数组的快捷方式,因此必须模拟对标准Java方法Class.isArray
的调用(obj是要测试的作业):
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())获取编码类型名称并解析它可能更容易 - 数组类型以' [&#开头39;,如果它后面有单个字母,它是原始类型的数组,否则就是它的对象数组(特别是它可能是多维数组)。