这个页面https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html列举了JNI处理的数据类型。例如,要处理数据类型为int
的Java变量,JNI中的等效变量为jint
。
现在,如果我有一个数据类型为Integer
的Java变量,我如何在JNI中处理这个变量,因为这个数据类型没有明显的等效性?
您必须将Integer
视为任何其他对象。你必须找到它的方法(intValue
)并在JNI
JNIEXPORT void JNICALL Java_recipeNo055_PassObject_passInteger
(JNIEnv * env, jclass obj, jobject objarg) {
jclass cls = (*env)->GetObjectClass (env, objarg);
jmethodID intValue = (*env)->GetMethodID(env, cls, "intValue", "()I");
jint result = (*env)->CallIntMethod(env, objarg, intValue);
printf("%-22s: %dn", "Passed value (int)", result);
}