JNI为什么jintArray不能被认为是[I而不是Ljava/lang/Object?

JNI why jintArray cannot be considered as [I instead of Ljava/lang/Object?

我对以下代码片段很好奇:

jintArray someJIntArray;
jfloatArray someJFloatArray;

// ... put legit values to someJIntArray and someJFloatArray

jclass pairClass = env->FindClass("android/util/Pair");

// #1
jmethodID pairConstructor = env->GetMethodID(pairClass, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");

// #2
jmethodID pairConstructor = env->GetMethodID(pairClass, "<init>", "([I[F)V");

jobject pairObject = env->NewObject(pairClass, pairConstructor, someJIntArray, someJFloatArray);

如果我使用 #1 ,那么我的 JNI 代码运行正常。但是,如果我使用 #2,则会发生 Pending exception java.lang.NoSuchMethodError: no non-static method "Landroid/util/Pair;.<init>([I[F)V" 错误。

我想知道,为什么我不能对jintArrayjfloatArray使用[I[F?其实我也很好奇为什么 Ljava/lang/Object; 在这个代码片段中有效,而 intfloat 在 Java.

中不是对象

您特意要求它找到不存在的构造函数 Pair(int[], float[])

不是你要传入的值,而是形参的类型。