Java JNI“;“新对象”;当使用NULL值初始化它时,是否不返回NULL?
当我做了一些,我得到了一些有效的答案,但我发现了一些其他的问题(或者我认为是) 代码如下:Java JNI“;“新对象”;当使用NULL值初始化它时,是否不返回NULL?,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,当我做了一些,我得到了一些有效的答案,但我发现了一些其他的问题(或者我认为是) 代码如下: JNIEXPORT jint JNICALL test_jni_Native_testSet(JNIEnv *env, jclass type, jobject tdobj) { //Create Integer class, get constructor and create Integer object jclass intClass = env->FindClass(env,
JNIEXPORT jint JNICALL test_jni_Native_testSet(JNIEnv *env, jclass type, jobject tdobj)
{
//Create Integer class, get constructor and create Integer object
jclass intClass = env->FindClass(env, "java/lang/Integer");
jmethodID initInt = env->GetMethodID(env, intClass, "<init>", "(I)V");
if (NULL == initInt) return -1;
jobject newIntObj = env->NewObject(env, intClass, initInt, 123);
//Now set your integer into value atttribute. For this, I would
//recommend you to have a java setter and call it in the same way
//as shown above
//clean reference
env->DeleteLocalRef(env, newIntObj);
return 0;
}
在java代码中,我通过这个本机函数设置了一个整数参数。
如果成功调用构造函数,env->NewObject似乎不会返回NULL。
这意味着我只能将一个jobject赋值为NULL,而不能调用NewObject函数并初始化它
我认为这不是一个好手艺
如前所述:
所以,我的问题是:
当我们用NULL值初始化对象时,为什么不返回NULL?函数
NewObject
使用非类型安全的变量参数列表。如果将NULL传递给构造函数,它将被解释为整数值0。因此,它将成功构造一个初始化为0的整数对象。首先感谢。我想读JNI的源代码,你知道我在哪里可以得到它吗?“我想读JNI的源代码”例如:啊哈~~我知道了~~谢谢~
jobject newIntObj = env->NewObject(env, intClass, initInt, 123);
env->NewObject(...)
RETURNS:
Returns a Java object, or NULL if the object cannot be constructed.