我找不到一个方法来测试任意jobject对象以检测它是局部引用还是全局引用。在JNI文档中没有看到相关内容。
这个问题的原因是为了增加一些错误检查和逻辑,以适应我的自定义JNI工具。在我的代码中,jobject引用可能来自不同的地方(包括其他用户/模块),因此我正在寻找一种测试它的方法。
例如,我想要一个实用程序将局部引用“提升”为全局引用,但它也应该适用于全局引用(即如果传递了全局引用,则不应崩溃或出现任何问题)。我可以尝试异常检查,但我不知道如何避免误报。
如果对全局引用调用DeleteLocalRef会发生什么。文档说NewGlobalRef可以传递全局或局部引用,但我认为删除错误引用会有问题。
jobject toGlobalRef(jobject& locRef)
{
JNIEnv* env = jniEnv(); //gets correct JNIEnv* here
if (locRef == NULL)
return NULL;
jobject globalRef = env->NewGlobalRef(locRef);
env->DeleteLocalRef(locRef);
locRef = NULL;
return globalRef;
}