如果有办法测试任意作业以检测它是本地参考还是全局参考,我找不到答案。我在 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;
}