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"
错误。
我想知道,为什么我不能对jintArray
和jfloatArray
使用[I
和[F
?其实我也很好奇为什么 Ljava/lang/Object;
在这个代码片段中有效,而 int
和 float
在 Java.
中不是对象
您特意要求它找到不存在的构造函数 Pair(int[], float[])
。
不是你要传入的值,而是形参的类型。
我对以下代码片段很好奇:
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"
错误。
我想知道,为什么我不能对jintArray
和jfloatArray
使用[I
和[F
?其实我也很好奇为什么 Ljava/lang/Object;
在这个代码片段中有效,而 int
和 float
在 Java.
您特意要求它找到不存在的构造函数 Pair(int[], float[])
。
不是你要传入的值,而是形参的类型。