我想像这样调用我的 C++ 类的 Java 绑定(bind):
std::streamsize DataStreamJava::length() const {
jmethodID m = jni()->GetMethodID(j_dataStream_class_,
"length", "()J");
return jni()->CallLongMethod(j_dataStream_global_, m);
}
但是这是不可能的,因为这些 JNI 调用不是 const。
JNI 是否为 const 方法提供 const 函数?删除 const 属性是解决这个问题的唯一方法吗?
最佳答案
我认为简短的答案是“不”。这些 JNI 函数没有 const
版本。下一个问题可能是“应该有吗?”我认为答案也是“不”。 JNI 函数都有可能改变 JVM 的状态。 (至少它们都有能力在 JVM 中创建错误,从而改变其内部状态。)我认为实际上违反了 const
属性隐含的约定 -这不仅仅是 JNI 头文件中的一些设计缺陷。
关于java - 从 const 方法调用 JNI 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003475/