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

时间:2015-10-15 00:30:05

标签: java java-native-interface

假设我在JNI代码中得到了一个未知(任意)类型的作业。如何检查它是否是阵列?查找数组元素类型的额外点。

1 个答案:

答案 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;,如果它后面有单个字母,它是原始类型的数组,否则就是它的对象数组(特别是它可能是多维数组)。

相关问题