修改
我终于发现问题是由于null值毕竟不是null,因为其中一个构造函数没有将值初始化为零。有了这些知识,我想将我的问题改为以下内容:
如果参数应该为null,那么通过JNI将NULL / 0 / nullptr传递给Java方法是否安全?
到目前为止我发现的源代码结果不一致 - 有些人说使用JNI时,C中的NULL和Java中的null是相同的。有些,就像在remudada的答案中所链接的那样,表明它可能不完全正确。
旧问题
使用JNI时,是否可以使用null参数调用Java方法?
我尝试传递null(0,NULL或nullptr),但这会导致Segmentation错误。我还尝试使用null参数NewGlobalRef
,但只返回null。
假设以下Java代码:
class Main {
public void javaFoo(Object o) {
...
}
}
从C ++调用此方法将类似于:
env->CallVoidMethod(object, javaFooID, value);
如果我希望value
为空,我该怎么做?
问题是我不能轻易避免传递null对象。有各种具有多个参数的setter,这些参数可能为null,也可能不为null,其中null为无效值:
public void setFoo(Object a, Object b, Object c, Object d) {
... // any parameter can be null
}