假设我有一个JNI代码中未知(任意)类型的job对象。我如何检查它是否是一个数组?查找数组元素类型的额外加分。
因此,JNI似乎没有提供快捷功能来检查数组,因此必须模拟调用标准Java方法Class.isArray
(obj是要测试的jobobject):
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())和解析它-一个数组类型开始与'[',如果有一个字母之后,它的基本类型的数组,否则它的对象数组(特别是,它可能是多维数组)。